我试图编译为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被使用两次,一次是当其在顶部被声明,并且一旦当实际使用过。

这里声明:

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 ++好。

有帮助吗?

解决方案

根据博客帖子:

  

由于它发生,我跑DUMPBIN上vssapi.lib /出口,并发现它的出口ShouldBlockRevert,但由于C ++名称重整的重整名称是不同的。它为什么不一样?因为在vssapi.lib,第一个参数ShouldBlockRevert没有wchar_t的,它的无符号短。 “那又怎么样”,你在想,“他们相当于”。我不反对,但编译器会将它们视为不同类型的名称manging目的。有什么解决?那么,禁用在项目属性在C / C ++语言属性页的内在wchar_t的类型(等同于/ ZC:如果你是两个人谁建立与生成文件的Visual C ++项目,在这个星球上的一个wchar_t-切换)。

     

一旦这样做了,LPCWSTR宏定义为无符号短,名字改编的比赛,行星排列,并可以链接。 QED。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top