문제

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

DisplockRevert는 상단에 선언 될 때 한 번, 실제로 사용될 때 두 번 사용됩니다.

여기에 선언 :

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에서 덤프 빈 /내보내기를 실행하여 내보내기를해야한다는 것을 알았지 만 C ++ 이름 덕분에 엉망진창 이름이 다릅니다. 왜 다른가요? vssapi.lib에서,해야 할 첫 번째 인수는 WCHAR_T가 아니며 서명되지 않은 짧은 일입니다. “그래서 무엇”, 당신은“그들은 동등합니다”라고 생각합니다. 그리고 나는 동의하지 않지만 컴파일러는 이름 관리 목적으로 다른 유형으로 취급합니다. 수정은 무엇입니까? 프로젝트 속성의 C /C ++ 언어 속성 페이지에서 고유 WCHAR_T 유형을 비활성화하십시오 ( /ZC : WCHAR_T- 스위치와 동일하게 MakeFiles로 시각적 C ++ 프로젝트를 구축하는 지구상의 두 사람 중 하나).

이 작업이 완료되면 LPCWSTR 매크로는 서명되지 않은 짧은 이름의 이름을 망가질로 정의하고 행성이 정렬되며 링크 할 수 있습니다. Qed.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top