2009-04-04 6 views
1

私はVSS SDKリンカエラーがvshadow、ボリュームシャドウコピーサービス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 

ShouldBlockRevertのためのC++プロジェクトをコンパイルしようとすると、このリンカエラーを取得していますの一部をコンパイルするときは、一度ときにそれを、二回使用されています一番上に宣言され、一度実際に使用されると宣言されます。

はここで宣言:

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++でその苦手。

答えて

2

thisのブログ記事によると:偶然にも

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

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

+0

いいえ、既に行っています。それはセットアップされた。 – Malfist

+0

あなたはVistaにいますか? – dirkgently

+0

更新された回答を参照してください。私はデバッグ-XPの代わりに、デバッグ・サーバー – dirkgently