2009-04-04 6 views
1

Je reçois cette erreur d'éditeur de liens lorsque vous essayez de compiler le projet C++ pour le SDK VSSerreur Linker lors de la compilation vshadow, une partie du Volume Shadow Copy service SDK

Error 1 error LNK2019: unresolved external symbol "long __stdcall ShouldBlockRevert(wchar_t const *,bool *)" ([email protected]@[email protected]) referenced in function "public: void __thiscall VssClient::RevertToSnapshot(struct _GUID)" ([email protected]@@[email protected]@@Z) revert.obj vshadow 

Le ShouldBlockRevert est utilisé deux fois, une fois quand il est déclaré en haut, et une fois quand il est réellement utilisé.

Déclaré ici:

HRESULT APIENTRY ShouldBlockRevert(IN LPCWSTR wszVolumeName, OUT bool* pbBlock); 

et utilisé ici:

CHECK_COM(::ShouldBlockRevert(Snap.m_pwszOriginalVolumeName, &bBlock)); 
    if (bBlock) 
    { 
     ft.WriteLine(L"Revert is disabled on the volume %s because of writers", 
       Snap.m_pwszOriginalVolumeName); 
     return; 
    } 

Désolé, je ne suis pas bon avec C++.

Répondre

2

Selon this blog:

Comme il arrive, j'ai couru dumpbin/exports sur vssapi.lib, et a constaté qu'il ne ShouldBlockRevert à l'exportation, mais grâce à C++ nom mutiler le nom mutilée est différent. Pourquoi est-ce différent? Parce que dans vssapi.lib, le premier argument de ShouldBlockRevert n'est pas wchar_t, il est non signé short. "Alors quoi", vous pensez, "ils sont équivalents". Et je ne suis pas en désaccord, mais le compilateur les traite comme des types différents pour la gestion des noms. Quelle est la solution? Désactivez le type wchar_t intrinsèque dans la page de propriétés du langage C/C++ dans les propriétés du projet (équivalent au commutateur/Zc: wchar_t- si vous êtes l'une des deux personnes sur la planète qui construisent des projets Visual C++ avec makefiles).

Une fois cela fait, la macro LPCWSTR est définie par des correspondances courtes non signées, des correspondances de noms, des planètes alignées, et vous pouvez lier. QED.

+0

non, déjà fait cela. Il est venu mis en place. – Malfist

+0

Êtes-vous sur Vista? – dirkgently

+0

Voir la mise à jour de la réponse. – dirkgently

Questions connexes