Visual c++ 从MFC DLL导入函数时LNK2001未解析外部
我创建了一个MFC DLL并导出了函数,例如在文件SerialPort.h中: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”,并调用
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类(根据您的代码),但您可以在应用程序中使用它并调用其成员函数!?我有点困惑。是的,但我不想导出类中的所有变量,因此这种方式只允许访问我想要的函数。。。或者至少我认为这就是它的工作原理!是的,但是我不想导出类中的所有变量,所以这种方式只允许访问我想要的函数。。。或者至少我认为这就是它的工作原理!