سؤال

أحصل على خطأ رابط هذا عند محاولة ترجمة مشروع 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 على مطابقات غير موقعة قصيرة، ومطابقات المشاهير الأسماء، ومحاذاة الكواكب، ويمكنك الارتباط. كيد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top