リンカエラーコンパイルvshadow、ボリュームシャドウコピーサービスSDKの一部
-
23-08-2019 - |
質問
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ます。
所属していません StackOverflow