簡體   English   中英

C ++ MFC庫中未解析的外部符號

[英]Unresolved external symbol in C++ MFC library

我試圖在我的應用程序中實現DLL,但是自從編寫C ++以來,它已經過去了一段時間,所以這里有些麻煩... DLL中的類使用特定於該項目的資源文件。 在這里您可以看到我的代碼:

// ErrorHandler.h (in Resources.dll - an MFC Library)

namespace HandWritten
{
    class ErrorHandler
    {
    private:
        unsigned int m_error_id;
        string get_error_text();
        string get_error_code();
    public:
        ErrorHandler(unsigned int error_id);
        ~ErrorHandler();
    };
}

我創建了一個包含MFC標頭的控制台應用程序,該應用程序必須測試我的庫中的功能。 這是測試儀的主要源文件:

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
    int nRetCode = 0;

    HMODULE hModule = ::GetModuleHandle(NULL);

    if (hModule != NULL)
    {
        // initialize MFC and print and error on failure
        if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0))
        {
            // TODO: change error code to suit your needs
            _tprintf(_T("Fatal Error: MFC initialization failed\n"));
            nRetCode = 1;
        }
        else
        {
            // TODO: code your application's behavior here.
        }
    }
    else
    {
        // TODO: change error code to suit your needs
        _tprintf(_T("Fatal Error: GetModuleHandle failed\n"));
        nRetCode = 1;
    }

    new HandWritten::ErrorHandler(30001);

    return nRetCode;
}

我從編譯器得到的錯誤在這里:

error LNK2019: unresolved external symbol "public: __thiscall HandWritten::ErrorHandler::ErrorHandler(unsigned int)" (??0ErrorHandler@HandWritten@@QAE@I@Z) referenced in function _wmain   E:\Applications\HandWritten\Tester\Tester.obj   Tester

請幫我解決這個問題,因為如果它不起作用,我會發瘋的...

* 編輯:*類構造函數的實現:

namespace HandWritten {
    ErrorHandler::ErrorHandler(unsigned int error_id) : m_error_id{error_id}
    {
        string content(MAKEINTRESOURCEA(error_id));
        MessageBoxA(NULL, content.c_str(), "Ok", MB_OK);
    }
}

這是一個非常常見的實現,表明鏈接器無法找到該方法的實現。 您通常可以通過以下方式提供實施:

  • 將包含實現的已編譯目標文件(.obj)傳遞給鏈接器。
  • 將包含實現的靜態庫(.lib)傳遞給鏈接器。
  • 將導入庫(.lib)傳遞給鏈接器,以動態鏈接到提供實現的DLL。

鏈接器告訴您您尚未執行任何這些操作。 您需要確定所需的選項,然后確保鏈接器獲得了所需的內容。

在我看來,您好像打算做后者。 該實現駐留在DLL中。 您需要將DLL的導入庫提供給鏈接器。 編譯DLL時,還需要在類上使用__declspec(dllexport)在使用類時,還需要在類上使用__declspec(dllexport) __declspec(dllimport)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM