以下是该方案:
平台: VS2005和语言是VC ++
情况: 只有一个装配CMPW32。它有2个项目: 1是一个名为CMPW32的DLL项目,第二个是名为Driver的.exe项目 它们在主程序集文件夹下共享相同的Debug文件夹。 我已经能够从DLL中成功导出一些函数。 Driver项目访问其中一个导出函数。 (首先,如果需要为SAME程序集中的项目导出函数以便能够使用它们,我不是。我可以只包含头文件并使用我认为的函数。)
以下是来自某些文件的几行代码,您可能会发现这些代码可用于分析我的问题:
//main.cpp file from the Driver project which is meant to generate Driver.exe
#pragma comment(lib, "winmm.lib")
#include <CM.h>
#include "conio.h"
#include "CMM.h"
#include "CMF.h"
#define C_M_F _T("c:\\CannedMessages.en-US")
int_tmain (int argc, TCHAR* argv [])
{
CMM myobjModel;
CMF::Read (CANNED_MESSAGES_FILE, myobjModel);
getch();
}
//CMM.h file
#ifndef C_M_M
#define C_M_M
#include "CMD.h"
#include "CMC.h"
#include "CM.h"
#define _C_M_DLL
#include "CMP.h"
class CM_DLL_API CMM
{ //some code here...
}
//CMF.h
#ifndef C_M_F
#define C_M_F
#include "CMM.h"
#define _C_M_DLL
#include "CMP.h"
class CM_DLL_API CMF
{ //some code here...
}
//CMP.h
#ifndef C_M_P
#define C_M_P
#include "CMD.h"
#define C_M_B_F _T("CannedMessages.")
#ifdef _C_M_DLL
#define CM_DLL_API __declspec( dllexport )
#else
#define CM_DLL_API __declspec( dllimport )
#endif
extern "C"
{
//list of functions to be exported..
}
构建解决方案的错误:
错误13错误LNK2019:函数_wmain main.obj中引用了未解析的外部符号“public:__thiscall CMM :: ~CMM(void)”(?? 1CMM @@ QAE @ XZ)
Error15致命错误LNK1120:2个未解析的外部C:\“somepath这里我不能透露”\ Projects \ CMPW32 \ Debug \ Driver.exe
请注意:如果我选择仅构建CMPW32 DLL项目,则没有错误,并且在调试文件夹中生成CMPW32.dll文件,并导出正确的函数。 然而,似乎有一些非常明显的链接问题,我不知道发生了什么。我已经包含了所有必需的文件,并且还在“项目设置”的输入中输入了所需的.lib。路径也已正确设置。
如果有人可以帮我解决这个问题,那将会非常有帮助。如果需要其他信息,请告知。
谢谢, Viren
答案 0 :(得分:3)
看起来您的Driver.exe项目不包含CMM类的CPP源文件,可能是CMM.cpp。
或
您已在.H文件(CMM.H)中声明了CMM类的析构函数,并忘记在.CPP文件(CMM.CPP)中实现它。