DllImport & DllImportAttribute

29/08/2004 - 12:32 por Castorp | Informe spam
Hola,

Estoy estudiando un código en C# y observo que se utiliza
la función DllImport("kernel32.dll", ExactSpelling=true),
cuando busco la documentación de esta función en la ayuda
del Visual Studio .NET lo más parecido que encuentro es
DllImportAttribute. A esta última función se le pasa
igualmente un nombre de una DLL. ¿Alguien podría
explicarme si hay alguna diferencia entre ambas y por que
una de ellas no está documentada pero funciona igualmente?

Otra duda que tengo es el uso de los [] cuando se llama a
esta función. ¿Que significa?, ¿que se le dice al
compilador cuando pones los []?, lo pregunto porque
observo en este código que no solamente lo utiliza para
llamar a esta función sino también por ejemplo para la
siguiente:

[StructLayout(LayoutKind.Sequential, Pack=1)]

Muchas gracias.

Preguntas similare

Leer las respuestas

#1 Tomas Restrepo \(MVP\)
29/08/2004 - 14:57 | Informe spam
Castorp,
<<
Estoy estudiando un código en C# y observo que se utiliza
la función DllImport("kernel32.dll", ExactSpelling=true),
cuando busco la documentación de esta función en la ayuda
del Visual Studio .NET lo más parecido que encuentro es
DllImportAttribute. A esta última función se le pasa
igualmente un nombre de una DLL. ¿Alguien podría
explicarme si hay alguna diferencia entre ambas y por que
una de ellas no está documentada pero funciona igualmente?






NO es una función, es un atributo. En si mismo, un atributo es una clase, la
costumbre es que su nombre termine con la palabra "Attribute", en cuyo caso
el compilador permite que cuando se use dicho atributo este sufijo se omita.
Por lo tanto, DllImport y DllImportAttribute son lo mismo.
<<
Otra duda que tengo es el uso de los [] cuando se llama a
esta función. ¿Que significa?, ¿que se le dice al
compilador cuando pones los []?,





Esa es la sintaxis para poner asociar un atributo a un elemento (asembly,
propiedad, clase, funcion, etc). Nuevamente, un atributo no es una
funcion,solo parece una porque se usa una sintaxis similar a la llamada de
un constructor.

Tomas Restrepo

Respuesta Responder a este mensaje
#2 A.Poblacion
29/08/2004 - 15:04 | Informe spam
En realidad todos los atributos del framework terminan en el sufijo
Attribute, pero el compilador ya lo sabe y cuando escribes en tu programa un
atributo que no termina en dicho sufijo, el compilador lo añade
automáticamente. Por lo tanto, cuando escribes DllImport, el compilador
automáticamente sobreentiende que lo que quieres decir es
DllImportAttribute.

Los [] esos que mencionas son precisamente los que le dicen al compilador
que lo que está encerrado dentro de ellos es un Atributo. Esa es la sintaxis
que utiliza C# para insertar atributos dentro del código fuente.


"Castorp" wrote in message
news:222001c48db3$70424470$
Hola,

Estoy estudiando un código en C# y observo que se utiliza
la función DllImport("kernel32.dll", ExactSpelling=true),
cuando busco la documentación de esta función en la ayuda
del Visual Studio .NET lo más parecido que encuentro es
DllImportAttribute. A esta última función se le pasa
igualmente un nombre de una DLL. ¿Alguien podría
explicarme si hay alguna diferencia entre ambas y por que
una de ellas no está documentada pero funciona igualmente?

Otra duda que tengo es el uso de los [] cuando se llama a
esta función. ¿Que significa?, ¿que se le dice al
compilador cuando pones los []?, lo pregunto porque
observo en este código que no solamente lo utiliza para
llamar a esta función sino también por ejemplo para la
siguiente:

[StructLayout(LayoutKind.Sequential, Pack=1)]

Muchas gracias.
Respuesta Responder a este mensaje
#3 edison martinez
29/08/2004 - 17:47 | Informe spam
Para complementar las respuestas que te han dado, te comento que no solo
puedes utilizar los atributos contruidos como el clasico [STAThread] o
[MTAThread] o el que mencionas [DllImport], estos entre muchos otros son
los que te provee el framework sino que puedes crearte tu tus propios
atrubutos heredando de Attribute asi

public class Sample : Attribute { ... }

Ademas, no todos los atributos los puedes emplear en todos los ambitos, los
atributos tienen su respectivo "target" es decir los puedes emplear sobre
Assemblies, Modulos, Clasese, Structuras, Enumeraciones, Constructores,
Metodos, Propiedades, Campos, Eventos, Interfaces, Parametros, Delegados,
bien sobre todos, uno o algunos de ellos. y puedes incluso tener más de un
atributo sobre el mismo elemento

Edison Martínez García
MCP

"Castorp" wrote in message
news:222001c48db3$70424470$
Hola,

Estoy estudiando un código en C# y observo que se utiliza
la función DllImport("kernel32.dll", ExactSpelling=true),
cuando busco la documentación de esta función en la ayuda
del Visual Studio .NET lo más parecido que encuentro es
DllImportAttribute. A esta última función se le pasa
igualmente un nombre de una DLL. ¿Alguien podría
explicarme si hay alguna diferencia entre ambas y por que
una de ellas no está documentada pero funciona igualmente?

Otra duda que tengo es el uso de los [] cuando se llama a
esta función. ¿Que significa?, ¿que se le dice al
compilador cuando pones los []?, lo pregunto porque
observo en este código que no solamente lo utiliza para
llamar a esta función sino también por ejemplo para la
siguiente:

[StructLayout(LayoutKind.Sequential, Pack=1)]

Muchas gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida