2010-12-12 21 views
0

salut Je ne suis pas un développeur C++ et j'essaye de compiler l'application de quelqu'un d'autre. La construction réussit, mais je reçois 5 avertissements 'inconsistent dll linkage'.compiler quelqu'un d'autre vs C++ app - lien incohérent

La DLL se construit mais ne fonctionne pas dans le même scénario que la DLL existante. il n'y a eu aucun changement de code.

après quelques googler, je suppose qu'il doit faire avec cela, trouvé dans le fichier d'en-tête:

#ifdef CPLAPPLET_PROGRAM_EXPORTS 
#define CPLAPPLET_PROGRAM_API __declspec(dllexport) 
#else 
#define CPLAPPLET_PROGRAM_API __declspec(dllimport) 
#endif 

et il y a un commentaire dans le code qui dit CPLAPPLET_PROGRAM_EXPORTS est défini sur la ligne de commande.

Les avertissements se produisent sur les fonctions exportées, comme ceci:

HRESULT _stdcall CCplApplet_PROGRAM::DllUnregisterServer() 
{ 
// our code added here 
    return 0; 
} 

quelqu'un peut me diriger dans la bonne direction ici?

merci.

EDIT pour répondre aux commentaires:

J'ai créé un projet C++ dll win32 vs 2008, et je l'ai ajouté leur .cpp, .h et fichiers .def à ce projet, mais c'est tout. Au lieu de cliquer simplement sur 'build', je me demande si je dois faire quelque chose de spécifique avec le fichier .def ou quelque chose comme ça?

le fichier d'en-tête définit les méthodes comme ceci:

class CPLAPPLET_LNK_PROGRAM CCplApplet_PROGRAM { 
public: 
static LONG APIENTRY CPlApplet(HWND hWnd, UINT uMsg, LONG lParam1, LONG lParam2); 

private: 
... 
HRESULT _stdcall DllUnregisterServer(void); 
...  
    }; 

le fichier def:

LIBRARY "CplApplet_PROGRAM" 

EXPORTS DllUnregisterServer PRIVATE 
+0

Développez-vous leur solution? Est-il possible que vous ayez perdu une spécification de fichier .def pour la ligne de liaison? – Rup

+0

Comment 'DllUnregisterServer' est-il défini dans le fichier d'en-tête? Utilisez-vous 'la classe CPLAPPLET_PROGRAM_API CCplApplet_PROGRAM ...' dans l'en-tête fie? Aussi, si vous construisez à partir de VS, le drapeau est-il défini? – Asha

+0

merci - J'ai modifié pour répondre à ces questions. Asha, de quel drapeau parlez-vous? –

Répondre

3

Cliquez droit sur le projet dans la fenêtre Explorateur de solutions, Propriétés. Propriétés de configuration, C/C++, Préprocesseur, Définition des préprocesseurs. Vérifiez que vous voyez CPLAPPLET_PROGRAM_EXPORTS là. Si vous ne l'ajoutez pas.

Il est également très probable que vous aurez besoin d'un fichier .def pour que l'exportation soit renommée. Assurez-vous qu'il figure dans la liste des fichiers de votre projet. Après la construction, utilisez Dumpbin.exe/exports sur la DLL générée et assurez-vous que l'exportation est présente et correctement orthographiée "DllUnregisterServer" sans caractères supplémentaires. Avoir besoin de l'aide de l'auteur n'est pas très improbable, la façon dont les exportations de COM semblent être traitées est plutôt non standard.

+0

c'est tout simplement génial! – rostamn739