Ошибка компоновщика при компиляции vshadow, части SDK службы теневого копирования томов.

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

Вопрос

Я получаю эту ошибку компоновщика при попытке скомпилировать проект C++ для VSS SDK.

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

Метод FollowBlockRevert используется дважды: один раз, когда он объявлен вверху, и один раз, когда он фактически используется.

Заявлено здесь:

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

Извините, я не так хорош в С++.

Это было полезно?

Решение

В соответствии с этот Сообщение блога:

Так получилось, что я запустил dumpbin/exports на vssapi.lib и обнаружил, что он экспортирует MustBlockRevert, но благодаря искажению имени C++ искаженное имя отличается.Почему все по-другому?Поскольку в vssapi.lib первый аргумент MustBlockRevert — это не wchar_t, а беззнаковый короткий параметр.«Ну и что», — думаете вы, — «они равнозначны».И я не согласен, но компилятор рассматривает их как разные типы в целях управления именами.Что исправить?Итак, отключите встроенный тип wchar_t на странице свойств языка C/C++ в свойствах проекта (эквивалент переключателя /Zc:wchar_t-, если вы один из двух людей на планете, которые создают проекты Visual C++ с помощью make-файлов).

Как только это будет сделано, макрос LPCWSTR будет определен как беззнаковый короткий, совпадения имен, выравнивание планет, и вы сможете связать их.КЭД.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top