我創建了一個DLL項目併成功構建它。然後我試圖在另一個項目TEST中使用該DLL,並且出現以下錯誤。錯誤LNK2001:與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> > >)" ([email protected]@@[email protected][email protected][email protected][email protected]@@@@@[email protected]@@Z)
我在鏈接器屬性中添加了必需的lib,並且我還在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;
}
而且在測試我做了以下內容:
test.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;
}
讓我知道你是否需要更多信息,謝謝。
小心評論-1? – PTBG 2012-04-05 17:28:43
兩個項目都使用ATL嗎?兩個項目都有相同的運行時庫嗎?檢查常規 - > ATL和使用C/C++ - >代碼發生 - >運行時庫 – devshorts 2012-04-05 18:09:24
@devshorts是,無論是運行庫,並使用ATL都在這兩個項目均 – PTBG 2012-04-05 18:19:39