خطأ رابط عند تجميع vshadow، جزء من SDK Service Copy Service SDK
-
23-08-2019 - |
سؤال
أحصل على خطأ رابط هذا عند محاولة ترجمة مشروع 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
يتم استخدام IndBlockReverT مرتين، مرة واحدة عندما يتم الإعلان عنها في الأعلى، وبمجرد استخدامه بالفعل.
أعلن هنا:
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، ووجدت أنها تقوم بتصدير lectblockRevert، ولكن بفضل C ++ اسم المشاهير اسم المشاهير مختلف. لماذا هو مختلف؟ لأنه في VSSAPI.LIB، فإن الوسيطة الأولى التي يجب أن تدفع إلى WHARBLLOCKREVERNT لم تكن Wchar_T، فهي قصيرة غير موقعة. "إذن ماذا"، أنت تفكر، "إنها مكافئة". وأنا لا أختلف، لكن المترجم يعاملهم كأنواع مختلفة لأغراض حثم الاسم. ما هو الإصلاح؟ حسنا، قم بتعطيل نوع Whare_t الجوهري في صفحة خاصية لغة C / C ++ في خصائص المشروع (أي ما يعادل / zc: wchar_t- التبديل إذا كنت أحد الأشخاص على الكوكب الذي يقوم ببناء مشاريع Visual C ++ مع MakeFiles).
بمجرد الانتهاء من ذلك، يتم تعريف الماكرو LPCWSTR على مطابقات غير موقعة قصيرة، ومطابقات المشاهير الأسماء، ومحاذاة الكواكب، ويمكنك الارتباط. كيد.