我能否刚开始说我感谢您花时间浏览我的问题并尝试提供帮助。不过,我已经尝试了here和here上提出的解决方案,他们没有为我工作。C++ DLL项目中无法解析的外部符号
这是我的问题: 我试图创建一个串行端口类作为VS12 DLL项目。我有一个头文件“SerialDll.h”,它包含在我的C++源文件“SerialDll.cpp”中。当我尝试建立在Visual Studio 2012的解决方案,我得到以下错误:
错误11错误LNK1120:1周无法解析的外部C:\冲刺7 \ SerialDll \调试\ SerialDll.dll 11 SerialDll 错误10错误LNK2001:无法解析的外部符号“__declspec(dllimport)private:static void MySerial :: MySerialPort :: serial_port_handle”(__imp_?serial_port_handle @ MySerialPort @ MySerial @@ 0PAXA)C:\ Sprint 7 \ SerialDll \ SerialDll \ SerialDll.obj SerialDll
当我尝试实施约翰Zwinck的解决方案,这是错误我得到:
错误2错误C2491: 'MySerial :: MySerialPort :: serial_port_handle':dllimport的静态数据成员的定义不允许C:\冲刺7 \ serialdll \ serialdll \ serialdll.cpp 16 1 SerialDll
这是在我的头文件中的代码:
#include <Windows.h>
#ifdef SERIAL_DLL_EXPORTS
#define SERIAL_DLL_API __declspec(dllexport)
#else
#define SERIAL_DLL_API __declspec(dllimport)
#endif
namespace MySerial
{
class MySerialPort
{
private:
static SERIAL_DLL_API HANDLE serial_port_handle;
public:
SERIAL_DLL_API MySerialPort();
SERIAL_DLL_API ~MySerialPort();
};
}
这是我的C++源文件中的代码,与约翰Zwinck的解决方案:
#include "stdafx.h"
#include "SerialDll.h"
#include <stdexcept>
#include <iostream>
using namespace std;
namespace MySerial
{
HANDLE MySerialPort::serial_port_handle;
MySerialPort::MySerialPort()
{
serial_port_handle = INVALID_HANDLE_VALUE;
}
MySerialPort::~MySerialPort()
{
if(serial_port_handle != INVALID_HANDLE_VALUE)
{
CloseHandle(serial_port_handle);
}
serial_port_handle = INVALID_HANDLE_VALUE;
}
}
希望你们可以帮我解决问题,或者至少让我参考一个工作解决方案的链接。
干杯!
你已经被告知答案(两次),但上面的代码不包括这些问题的答案。为什么不包括你在尝试给你答案时做了什么,显然你做错了一些事情。 – john
这里有两个问题,第一个是C++语言问题,你没有定义'MySerial :: MySerialPort :: serial_port_handle',你只声明了它。你已经多次被告知这个答案(见John Zwinck的答案)。另一个问题是'SERIAL_DLL_API'等符号的属性。我不知道这个答案,也许Shree Kumar说的是正确的,我不知道。但我知道你必须把两件事情都对好。所以实施John Zwinck的答案,然后从那里拿走。 – john
您好@john我之所以没有在这些答案中包含我的尝试,是因为他们没有为我工作,我想按照原样呈现我的代码。你可以在我的回复中看到John Zwinck的问题,当我尝试他的解决方案时,我得到另一个错误。 – BeeLabeille