リンカエラーコンパイルvshadow、ボリュームシャドウコピーサービスSDKの一部

StackOverflow https://stackoverflow.com/questions/717759

質問

VSS SDK

のためのC ++プロジェクトをコンパイルしようとすると、

私はこのリンカエラーを取得しています

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

ShouldBlockRevertは、それが実際に使用されたときにそれが一度先頭で宣言されており、一度際に、2回使用されます。

ここで宣言ます:

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

と、ここで使用されます:

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

申し訳ありませんが、私はC ++でその苦手ます。

役に立ちましたか?

解決

によるこののブログ記事:

  偶然にも、

、私はvssapi.libにDUMPBIN /輸出を走り、それが輸出ShouldBlockRevertを行うことがわかったが、C ++の名前のおかげでマングルされた名前をマングルすることは異なっています。なぜそれが違うのですか? vssapi.libで、ShouldBlockRevertへの最初の引数はwchar_t型ではないので、それは符号なしshortです。 「だから何」、あなたが考えている、「彼らは同等です」。そして、私は同意しませんが、コンパイラは、名前のmangingの目的のために、異なるタイプとして扱います。修正は何ですか?まあ、(/ Zcのと同等:あなたがメイクファイルでのVisual C ++プロジェクトをビルド地球上で2人の一人なら切り替えるwchar_t-)プロジェクトのプロパティでC / C ++言語のプロパティページに固有のwchar_tの種類を無効にします。

     それが終わったらだ

、LPCWSTRマクロは、惑星が並ぶ、符号なしの短い、名前マングル試合に定義され、あなたがリンクすることができます。 QEDます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top