繁体   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