2010-12-06 53 views
0

Condition préalablevC++ problème dans les variables globales d'import/export de la situation dans dll

environnement

: VC2005

j'ai rencontré ce problème lorsque découvert la dépendance circulaire dans mon projet (deux références dll les uns des autres), donc diviser soit d'un dll à deux dll.

expliquer par exemple:

typedef struct { <br> 
    char myFileName[MAX_PATH]; 
} MyStructure; 

Avant:

MyHeader.h

MyStructure globalStruct; 

Après:

MyCommon.h

#ifdef _MYGLOBAL_ 
#define API __declspec(dllexport) 
#else 
#define API __declspec(dllimport) 
#endif 

API extern MyStructure globalStruct; 

MyGlobal.c

API MyStructure globalStruct; 

MySpecific.c

API MyStructure globalStruct; 

échoué code après changé: (ce code execute dans dll spécifique)

handle = LoadLibrary(globalStruct.myFileName); 

Je confirme les valeurs globalStruct.myFileName sont même (au vrai mot).

Je ne peux pas accéder directement à la valeur avec le débogueur après modification. Donc, pour voir la valeur dans le débogueur, j'ai copié la variable locale temp []. Et puis, j'ai trouvé avant la valeur et après la valeur sont différents dans la queue factice factice.

avant:
d: [mon chemin] '0' (char null end) de '0' '0' ... après:
d: [mon chemin] '0' (extrémité char null) '-3' '-3' '-3' ...

merci pour votre lecture.

Répondre

0

auto-résolu mon problème.

Cela est dû au fait que dll n'est pas recompilé après le travail de suppression de dépendance circulaire.

Donc, ce problème n'est pas lié import/export variable globale mais dll recompiler problème.

Désolé pour ma question laide.