1

我创建了一个 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)

我被困在这个原因上,我已经尝试重建一切,但似乎没有任何帮助?

感谢您的任何帮助!

4

2 回答 2

1

您在类中使用 __declspec(dllexport) 吗?

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

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

于 2011-10-06T17:52:00.827 回答
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 来导入我认为我需要的函数,但它现在可以工作了!

希望这可以帮助任何可能有类似问题的人。

于 2011-10-05T10:08:00.110 回答