2009-02-17 11 views
7

Probablemente sea una pregunta simple, pero solo tengo Linux para probar este código donde no se necesita __declspec (dllexport). En el código actual __declspec (dllexport) está delante de todos los archivos en el archivo .h pero justo al frente de como el 50% de las funciones en el archivo cpp, así que me pregunto si realmente se necesitan en el archivo cpp.Es necesario __declspec (dllexport) en los archivos cpp

Respuesta

11

No, solo es necesario en el encabezado.

Aquí hay un link con más información.

Ampliando lo que estaba diciendo Vinay, a menudo he visto una macro definida

#if defined(MODULENAME_IMPORT) 
#define EXPORTED __declspec(dllimport) 
#elif defined(MODULENAME_EXPORT) 
#define EXPORTED __declspec(dllexport) 
#endif 

Luego, en su cabecera que haces

establezca las define en consecuencia en la configuración del proyecto para el proyecto haciendo la importación/exportación.

5

No, no es necesario en el archivo cpp. Solo en la declaración se requiere.

Por ejemplo, si tengo una clase CMyClass. Si quiero exportar este continuación .h tendrá

código .h servidor

__declspec (dllexport) CMyClass { };

En el código de cliente, es decir, que utiliza esta clase que tiene que reenviar declarar la clase como

El código de cliente

__declspec (dllimport) CMyClass;

// código para utilizar la clase

2

Es posible utilizar en el archivo .cpp cuando se haya plantilla de código y crear instancias que está en el archivo .cpp entonces usted necesita para exportar la definición cuando se crea una instancia. Pero incluso en este caso, he visto que hacer en .h también funciona. En Windows puede usar dumpbin.exe/exports * .dll para ver qué firmas se exportan, también hay una utilidad similar en Linux. Esto le dará una idea de cómo se exporta la firma.

Cuestiones relacionadas