从MFC DLL导入函数时,LNK2001未解析外部

时间:2011-10-04 16:33:42

标签: visual-c++ mfc linker dllimport declspec

我已经创建了一个MFC DLL,并已将函数导出到例如SerialPort.h文件中:

class CSerialPortApp : public CWinApp
{
public:
    CSerialPortApp();

    __declspec(dllexport) int SWrite(unsigned char* toSend, int len);
};

在我的MFC应用程序中我想调用SerialInterface.h中的函数我已经从DLL中包含了“SerialPort.h”并调用了:

__declspec(dllimport) int SWrite(unsigned char* toSend, int len);

class SerialInterface
{
public:

};

例如。

我已将SerialPort.lib文件添加到我的链接器包含但是当我尝试编译时我得到了

error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl SWrite(unsigned char*, int)" (__imp_?SWrite@@YAHPAEH@Z)

我对这个原因感到困惑,我试过重建一切,但似乎没有什么帮助?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

你在一个类中使用__declspec(dllexport)?

您可以从dll或整个类中导出全局函数,这些函数可能包含任何函数。您不必从类中导出选定的成员函数,我甚至不知道它是如何工作的。

有些奇怪的是,你没有从dll正确导出SerialPort类(根据你的代码),你可以在你的应用程序中使用它并调用它的成员函数!?我有点困惑。

答案 1 :(得分:0)

我找到了一个有效的替代方案,我相信我的方法不正确。

我在我的DLL中添加了一个不是CWinApp类的新类:

class SerialPort
{
public:
    __declspec(dllexport) SerialPort(void);
    __declspec(dllexport) virtual ~SerialPort(void);

    __declspec(dllexport) int SWrite(unsigned char* toSend, int len);
};

然后在我的应用程序和lib和dll等中包含了这个标题。

然后我将包含的头文件放在主CDialog头中,但重要的是不需要导入任何函数:

#include "SerialPort.h"

class CPPUDlg : public CDialog
{
public:
    CPPUDlg(CWnd* pParent = NULL); // standard constructor

    SerialPort objSerialPort;

然后在我的代码中我只需调用

objSerialPort.SWrite(toSend, len);

我没有使用dllimport导入我认为我需要的功能但它现在有用了!

希望这有助于任何可能遇到类似问题的人。