Domanda

sto ottenendo questo errore di linker quando si tenta di compilare il progetto C ++ per il VSS SDK

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

Lo ShouldBlockRevert viene utilizzato due volte, una volta quando viene dichiarata in alto, e una volta quando viene effettivamente utilizzato.

Dichiarato qui:

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

e utilizzato qui:

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

Mi dispiace, non sono così bravo con C ++.

È stato utile?

Soluzione

questo post del blog :

  

Si dà il caso, mi sono imbattuto dumpbin / export su vssapi.lib, e ha scoperto che lo fa esportare ShouldBlockRevert, ma grazie al C ++ nome pressare il nome storpiato è diverso. Perché è diverso? Perché in vssapi.lib, il primo argomento di ShouldBlockRevert non è wchar_t, è unsigned short. “So What”, stai pensando, “sono equivalenti”. E io non sono d'accordo, ma il compilatore li tratta come tipi diversi per scopi nome manging. Qual è la correzione? Beh, disattivare il tipo wchar_t intrinseca nella pagina delle proprietà C / C ++ linguaggio nelle proprietà del progetto (equivalente al / Zc: wchar_t- passare se sei una delle due persone sul pianeta che costruiscono progetti di Visual C ++ con makefile).

     

Una volta fatto, la macro LPCWSTR è definito per unsigned short, nome mangling partite, i pianeti si allineano, e si può collegare. QED.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top