Visual c++ 从MFC DLL导入函数时LNK2001未解析外部

Visual c++ 从MFC DLL导入函数时LNK2001未解析外部,visual-c++,mfc,linker,dllimport,declspec,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”,并调用

我创建了一个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文件添加到我的链接器includes中,但是当我尝试编译时

error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl SWrite(unsigned char*, int)" (__imp_?SWrite@@YAHPAEH@Z)
我被困在这个原因,我试图重建一切,但似乎没有任何帮助


谢谢你的帮助

我找到了一个可行的替代方案,我认为我没有正确地实施它

我在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导入我认为需要的函数,但它现在可以工作了


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

我找到了一个可行的替代方案,我相信我没有正确地实施它

我在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导入我认为需要的函数,但它现在可以工作了

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

您正在类内使用u declspec(dllexport)

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

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

您在类中使用的是u declspec(dllexport)

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


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

是的,但我不想导出类中的所有变量,因此这种方式只允许访问我想要的函数。。。或者至少我认为这就是它的工作原理!是的,但是我不想导出类中的所有变量,所以这种方式只允许访问我想要的函数。。。或者至少我认为这就是它的工作原理!