2017-07-07 2 views
0

J'ai une application MFC régulière à partir de laquelle je veux exporter une variable et l'utiliser dans une DLL. Voici un résumé des déclarations/définitions dans exe/dll qui devrait ressembler à here.Problème lors de l'exportation de la variable EXE à utiliser dans la DLL

__declspec(dllexport) BOOL g_status; // In EXE 
__declspec(dllimport) BOOL g_status; // in DLL 

L'erreur de liaison est suivant ce qui semble indiquer qu'il ne peut pas trouver en raison de mutiler nom?

error LNK2001: unresolved external symbol "__declspec(dllimport) int g_status" ([email protected]@3HA) 

Alors j'ai essayé cette combinaison ajouter extern "C"' to declaration in dll but it doesn't work because if I use C decorations on dll, the same has to be done on exe side as well but using 'extern "C" côté exe en fait forces qu'il soit devenu déclaration!

__declspec(dllexport) BOOL g_status; // in EXE 
extern "C" __declspec(dllimport) BOOL g_status; // in DLL 

Linker erreur ci-dessous:

error LNK2001: unresolved external symbol __imp__g_status 

Je suis un peu perdu. Je vois beaucoup d'exemples avec des fonctions mais pas beaucoup avec des variables, comment les exporter et si les décorations de noms sont encore en jeu?

+0

Votre premier "en EXE" montre 'dllimport', devrait être' dllexport' – franji1

+0

@ franji1 merci j'ai vérifié, qui était une faute de frappe dans le post seulement, l'a réparé. – zar

+1

Cela finit presque toujours par une dépendance circulaire. Vous ne pouvez pas lier la DLL avant d'avoir lié le fichier EXE. Mais vous ne pouvez pas lier le fichier EXE avant d'avoir lié la DLL. Il est [formellement possible] (https://stackoverflow.com/questions/2727020/what-is-use-of-exp-and-what-is-the-difference-between-lib-and-dll), mais pas directement supporté par l'IDE. Il vaut mieux éviter, bien sûr, si vous avez besoin d'une autre DLL pour être la maison de cette variable, alors qu'il en soit ainsi. Vous trouverez probablement plus d'utilisation pour cela. –

Répondre

0

Il s'agissait en effet d'un problème de dépendance circulaire signalé par Hans Passant dans un commentaire. Dans mon cas, je voulais temporairement cette variable pour le débogage de l'aide, donc je ne voulais pas la comprendre. Je finis par le déclarer dans l'une des DLL et je l'ai utilisé dans l'autre avec des définitions/déclarations simples comme ci-dessous.

__declspec(dllexport) BOOL g_status; // In EXE 
__declspec(dllimport) BOOL g_status; // in DLL 

Il y avait une autre mise en garde cependant, le dll de l'appelant doit avoir la dépendance à l'autre une erreur callee de éditeur de liens encore se produire. Je recevais cette erreur de l'éditeur de liens:

error LNK2001: unresolved external symbol "__declspec(dllimport) int g_status" ([email protected]@3HA) 

Il est parti lorsque j'ai défini les dépendances dll.

Espérons que cela aide certains.