gpt4 book ai didi

c++ - 错误 LNK2001 : unresolved external symbol with DLL

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:16:27 28 4
gpt4 key购买 nike

我创建了一个 DLL 项目并成功构建了它。然后我尝试在另一个项目 TEST 中使用 DLL,但出现以下错误。

Error   1   error LNK2001: unresolved external symbol "public: void __thiscall SnoMessage::setRawMessageName(class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (?setRawMessageName@SnoMessage@@QAEXV?$CStringT@_WV?$StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z)

我在链接器属性中添加了所需的库,并且还在 TEST include 目录中添加了头文件。所以该功能正在被识别,但它不断给出这些错误。 DLL由以下文件组成

SnoMessage.h

#pragma once
#include "StdAfx.h"
class SnoMessage
{
public:
__declspec(dllexport) SnoMessage(void);
__declspec(dllexport) ~SnoMessage(void);
__declspec(dllexport) void setRawMessageName(CString messageName);
__declspec(dllexport) void setRawMessageType(CString messageType);
__declspec(dllexport) void setRawMessageAttributes(std::map<CString,CString> attributes);
__declspec(dllexport) CString getRawMessageName();
__declspec(dllexport) CString getRawMessageType();
__declspec(dllexport) std::map<CString,CString> getRawMessageAttributes();

private:
CString messageName;
CString messageType;
std::map<CString,CString> attributes;
};

SnoMessage.cpp

#include "stdafx.h"
#include "SnoMessage.h"


SnoMessage::SnoMessage(void)
{
}


SnoMessage::~SnoMessage(void)
{
}

void SnoMessage::setRawMessageName(CString messageName){
this->messageName = messageName;
}

void SnoMessage::setRawMessageType(CString messageType){
this->messageType = messageType;
}

void SnoMessage::setRawMessageAttributes(std::map<CString,CString> attributes){
this->attributes = attributes;
}

CString SnoMessage::getRawMessageName(){
return messageName;
}

CString SnoMessage::getRawMessageType(){
return messageType;
}

std::map<CString,CString> SnoMessage::getRawMessageAttributes(){
return attributes;
}

在测试中我正在做以下事情:

测试.cpp

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "SnoMessage.h"

int _tmain(int argc, _TCHAR* argv[])
{
SnoMessage *msg = new SnoMessage();
msg->setRawMessageName("TEST");
return 0;
}

如果您需要更多信息,请告诉我,谢谢。

最佳答案

在您的 dll 中,在您要用于导出定义的一些 header 中定义它...

MyExports.h

#ifdef SNOMESSAGE_EXPORTS
#define SNOMESSAGE_API __declspec(dllexport)
#else
#define SNOMESSAGE_API __declspec(dllimport)
#endif

现在在您的 dll 中,您只需定义 SNOMESSAGE_EXPORTS,然后当您的 dll 被编译时,您的类和方法将对 exe 可见。但是当您在 exe 中包含这些相同的 header 时,宏将导入它们而不是导出它们。

 //In the DLL this is == to export, in the executable this is import.  Problem solved.
class SNOMESSAGE_API SnoMessage
{
public:
//...
};

您不再需要导出每个成员,只需导出类即可。

关于c++ - 错误 LNK2001 : unresolved external symbol with DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032950/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com