Frage

Ich erhalte diese Linker-Fehler beim Versuch, die c ++ Projekt für die VSS SDK

zu kompilieren
Error   1   error LNK2019: unresolved external symbol "long __stdcall ShouldBlockRevert(wchar_t const *,bool *)" (?ShouldBlockRevert@@YGJPB_WPA_N@Z) referenced in function "public: void __thiscall VssClient::RevertToSnapshot(struct _GUID)" (?RevertToSnapshot@VssClient@@QAEXU_GUID@@@Z)   revert.obj  vshadow

Die ShouldBlockRevert wird zweimal verwendet, einmal, wenn es an der Spitze deklariert wird, und einmal, als es tatsächlich verwendet wird.

erklärt hier:

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

und verwendet hier:

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;
    }

Sorry, ich bin nicht so gut mit c ++.

War es hilfreich?

Lösung

Nach diesem Blog-Eintrag:

  

Wie es passiert, lief ich dumpbin / export auf vssapi.lib, und stellte fest, dass es den Export ShouldBlockRevert tut, aber dank C ++ Name ist, die verstümmelten Namen Mangeln anders. Warum ist es anders? Da in vssapi.lib wird das erste Argument ShouldBlockRevert nicht wchar_t, dann ist es unsigned short. „Was“, du denkst, „sind sie gleichwertig“. Und ich anderer Meinung nicht, aber der Compiler behandelt sie als verschiedene Arten für Namen Manging Zwecke. Was ist die Lösung? Nun, deaktivieren Sie den intrinsischen Wchar_t Typen in der C / C ++ Sprache Immobilienseite in den Projekteigenschaften (entsprechen den / Zc: wchar_t- wechseln, wenn Sie eine der beiden Personen auf dem Planeten sind, die Visual C ++ Projekte mit Makefiles bauen).

     

Sobald das erledigt ist, wird das LPCWSTR Makro definiert unsigned short, Namen Mangeln Streichhölzer, Planeten ausrichten, und Sie verknüpfen können. QED.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top