2011-08-07 22 views
5

Tengo alguna pregunta sobre dllexport, dllimport en C++ en Windows. Supongamos que tengo algunos module.cpp y module.h que exportan funciones usando dllexport. Supongamos que también tengo moduleWrapper.cpp y moduleWrapper.h que importa funciones desde module.cpp usando dllimport.vinculación entre dllimport y dllexport

Puede alguien explicar por qué puedo escribir de menos #include module.h en mi moduleWrapper.cpp y moduleWrapper.h. No puedo entender cómo enlazador sabe acerca de las direcciones de las funciones de module.cpp, gracias de antemano por cualquier explicación

+0

Vamos a necesitar más información. Como ver cómo se ven tus importaciones y exportaciones. –

+0

¿Hay un module.dll? Y un module.lib para el enlazador? –

Respuesta

7

Por lo que entiendo, usted tiene algo como esto en module.h:

__declspec(dllexport) void f(); 

y entonces, usted tiene una declaración similar en su moduleWrapper.cpp:

__declspec(dllimport) void f(); 

Eso cuenta como una declaración de la función, por lo que eliminar cualquier necesidad de incluir module.h. La forma en que se hace comúnmente es poniendo el siguiente código en su archivo de inclusión:

#ifdef PROJECTNAME_EXPORTS // (the default macro in Visual Studio) 
#define PROJECTAPI __declspec(dllexport) 
#else 
#define PROJECTAPI __declspec(dllimport) 
#endif 

Y entonces declarar su función en el archivo de cabecera de esta manera:

PROJECTAPI void f(); 

De esta manera, se traducirá a dllexport cuando está compilando su DLL y dllimport en cualquier archivo que no sea parte de su DLL y que esté usando el encabezado.

Cuestiones relacionadas