Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中未解析的外部符号+;DLL项目_C++_Visual Studio 2012_Dll - Fatal编程技术网

C++ C+中未解析的外部符号+;DLL项目

C++ C+中未解析的外部符号+;DLL项目,c++,visual-studio-2012,dll,C++,Visual Studio 2012,Dll,首先,我想说,我感谢你花时间来回答我的问题,并试图提供帮助。然而,我已经尝试了一次又一次建议的解决方案,但它们对我没有效果 这是我的问题: 我正在尝试创建一个串行端口类作为VS12 DLL项目。我有一个头文件“SerialdL.h”,它包含在我的C++源文件“SerialDLL.CPP”中。当我尝试在visual studio 2012中构建解决方案时,出现以下错误: 错误11错误LNK1120:1未解析的外部C:\Sprint 7\SerialDll\Debug\SerialDll.dll 1

首先,我想说,我感谢你花时间来回答我的问题,并试图提供帮助。然而,我已经尝试了一次又一次建议的解决方案,但它们对我没有效果

这是我的问题: 我正在尝试创建一个串行端口类作为VS12 DLL项目。我有一个头文件“SerialdL.h”,它包含在我的C++源文件“SerialDLL.CPP”中。当我尝试在visual studio 2012中构建解决方案时,出现以下错误:

错误11错误LNK1120:1未解析的外部C:\Sprint 7\SerialDll\Debug\SerialDll.dll 1 1 SerialDll 错误10错误LNK2001:未解析的外部符号“\uu declspec(dllimport)private:静态无效*MySerial::MySerialPort::serial\u port\u handle”(\uu导入?serial\u port_handle@MySerialPort@MySerial@@0PAXA)C:\Sprint 7\SerialDll\SerialDll\SerialDll.obj SerialDll

当我尝试实施John Zwinck的解决方案时,我得到的错误是:

错误2错误C2491:“MySerial::MySerialPort::serial\u port\u handle”:不允许定义dllimport静态数据成员c:\sprint 7\serialdll\serialdll\serialdll\serialdll.cpp 16 1 serialdll

这是我的头文件中的代码:

#包括
#ifdef串行DLL导出
#定义串行DLL API declspec(dllexport)
#否则
#定义串行DLL API declspec(dllimport)
#恩迪夫
名称空间MySerial
{
类MySerialPort
{
私人:
静态串行DLL API句柄串行端口句柄;
公众:
串行DLL API MySerialPort();
串行DLL API~MySerialPort();
};
}

这是我的C++源文件中的代码,John Zwinck的解决方案是:

#包括“stdafx.h”
#包括“SerialDll.h”
#包括
#包括
使用名称空间std;
名称空间MySerial
{
HANDLE MySerialPort::serial\u port\u HANDLE;
MySerialPort::MySerialPort()
{
串行\u端口\u句柄=无效的\u句柄\u值;
}
MySerialPort::~MySerialPort()
{
if(串行端口句柄!=无效句柄值)
{
闭合手柄(串行端口手柄);
}
串行\u端口\u句柄=无效的\u句柄\u值;
}
}
希望你们能帮我找到一个解决方案,或者至少给我提供一个链接


干杯

答案与您链接的上一个问题的答案完全相同:

也就是说,您只声明了静态成员,但没有为其分配存储。您需要将其添加到实现文件中:

namespace MySerial
{
    HANDLE MySerialPort::serial_port_handle;
}

答案与您链接的上一个问题的答案完全相同:

也就是说,您只声明了静态成员,但没有为其分配存储。您需要将其添加到实现文件中:

namespace MySerial
{
    HANDLE MySerialPort::serial_port_handle;
}

如果希望将类导出到DLL之外,则需要对该类使用_declspec,而不是对每个成员函数/变量。(见附件)

您的头文件需要如下所示:

namespace MySerial
{
    class SERIAL_DLL_API MySerialPort
    {
        private:
            static HANDLE serial_port_handle;
        public:
            MySerialPort();
            ~MySerialPort();
    };
}

如果希望将类导出到DLL之外,则需要对该类使用_declspec,而不是对每个成员函数/变量。(见附件)

您的头文件需要如下所示:

namespace MySerial
{
    class SERIAL_DLL_API MySerialPort
    {
        private:
            static HANDLE serial_port_handle;
        public:
            MySerialPort();
            ~MySerialPort();
    };
}

您已经被告知答案(两次),但上面的代码不包括这些答案。为什么不把你在回答中所做的事情包括进去,显然你做了一些错误的事情。这里有两个问题,第一个是C++语言问题,那就是你还没有定义<代码> MySale::MySerialPoto::SerialSurtPosialHubj/<代码>,你只声明过它。这个问题的答案已经告诉你好几次了(见约翰·兹温克的答案)。另一个问题是符号
SERIAL\u DLL\u API
上的属性。我不知道这个问题的答案,也许Shree Kumar说的是正确的,我不知道。但我知道你必须把这两件事都做好。因此,实现John Zwinck的答案,然后从那里开始。嗨@John,我之所以没有在这些答案中包含我的尝试,是因为它们对我不起作用,我想按原样展示我的代码。你可以在我对John Zwinck问题的回答中看到,当我尝试他的解决方案时,我又犯了一个错误。就像我说的,这里有两个问题。约翰·兹温克的答案是第一个问题的正确答案。现在你必须试着解决第二个问题。所以不要拒绝John Zwinck的答案,因为它不是整个解决方案,它仍然是解决方案的一部分。您已经被告知答案(两次),但上面的代码不包括这些答案。为什么不把你在回答中所做的事情包括进去,显然你做了一些错误的事情。这里有两个问题,第一个是C++语言问题,那就是你还没有定义<代码> MySale::MySerialPoto::SerialSurtPosialHubj/<代码>,你只声明过它。这个问题的答案已经告诉你好几次了(见约翰·兹温克的答案)。另一个问题是符号
SERIAL\u DLL\u API
上的属性。我不知道这个问题的答案,也许Shree Kumar说的是正确的,我不知道。但我知道你必须把这两件事都做好。因此,实现John Zwinck的答案,然后从那里开始。嗨@John,我之所以没有在这些答案中包含我的尝试,是因为它们对我不起作用,我想按原样展示我的代码。你可以在我对John Zwinck问题的回答中看到,当我尝试他的解决方案时,我又犯了一个错误。就像我说的,这里有两个问题。约翰·兹温克的答案是第一个问题的正确答案。现在你必须试着解决第二个问题。所以不要拒绝John Zwinck的回答,因为这不是整个解决方案,它仍然是解决方案的一部分。嗨@JohnZwinck,谢谢你的回复。这是我在C++源文件中实现你的解决方案:UHHM对之前的评论感到抱歉,我在编辑BoxHi @ JohnZwinck中遇到了代码块的问题,谢谢你的回复。这就是我在C++源代码中实现你的解决方案的方法。