我正在尝试构建“AccountDllTest.cpp”以在Visual Studio 2013中测试dll“Account.dll”,但不断收到此链接器错误..
1>------ Build started: Project: AccountDllTest, Configuration: Debug x64 ------
1>AccountDllTest.obj : error LNK2019: unresolved external symbol "public: __cdecl Date::Date(int,int,int)" (??0Date@@QEAA@HHH@Z) referenced in function main
1>AccountDllTest.obj : error LNK2019: unresolved external symbol "public: int __cdecl Date::getMonth(void)" (?getMonth@Date@@QEAAHXZ) referenced in function main
1>C:\Users\Soumyadeep\Documents\Projects\AccountDllTest\x64\Debug\AccountDllTest.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
使用带有以下文件的Visual Studio 2013也成功构建了“Account.dll”
这里“ Interface.h ”只定义了包含纯虚函数的抽象类“ IAccount ”和“ Account.h ”定义从“ IAccount ”类派生的“帐户”类。 “ IAccount ”和“帐户”类由“日期”和“时间”类的对象组成在“ Date.h ”,“ Date.cpp ”,“ Time.h ”,“ Time.cpp”中定义和实施“分别。
AccountDllTest.cpp的代码如下所示
#include<iostream>
#include<conio.h>
#include"Headers\Interface.h"
#include<Windows.h>
using namespace std;
typedef IAccount* (_cdecl *FactoryFunc)();
int main()
{
HINSTANCE dll_handle = LoadLibrary(TEXT("..\\Core\\Account.dll"));
if (!dll_handle)
{
cout << "\n Unable to load Dll!!" << endl;
}
else
{
cout << "\n Dll successfully loaded!!" << endl;
}
FactoryFunc Create = (FactoryFunc)GetProcAddress(dll_handle, "createAccount");
IAccount* AC_1 = Create();
AC_1->setAccountNo(1);
AC_1->credit(2300);
cout << "\n Balance after credit" << AC_1->getBalance() << endl;
AC_1->lockAccount();
AC_1->credit(2300);
Date a;
a = AC_1->getLockDate();
cout<<"The account was locked on " ;
a.print();
_getch();
return 0;
}
在我决定在此行之后测试Date对象
之前,代码运行没有打嗝 AC_1->credit(2300);
我错过了什么? 对不起这个长期的问题,但非常感谢任何帮助...
答案 0 :(得分:0)
如果您使用dll中的类(因为我看到这是Date类),首先必须使用__declspec dllimport导入这些类,其次必须将测试程序与dll库链接(yourdll.lib)解析外部符号:
AccountDllTest.obj : error LNK2019: unresolved external symbol "public: __cdecl Date::Date(int,int,int)" (??0Date@@QEAA@HHH@Z) referenced in function main
AccountDllTest.obj : error LNK2019: unresolved external symbol "public: int __cdecl Date::getMonth(void)" (?getMonth@Date@@QEAAHXZ) referenced in function main
尝试在此处阅读dllimport和dllexport:https://msdn.microsoft.com/en-us/library/81h27t8c.aspx
答案 1 :(得分:0)
您必须从项目中引用DLL。 要做到这一点,只需:
此外,您还需要修改包含目录路径。
您可以阅读使用DLL创建广告的官方文档。 https://msdn.microsoft.com/en-us/library/ms235636.aspx
请注意,您必须在标头上添加定义: #ifdef YOURHEADER_EXPORTS #define YOURHEADER_API __declspec(dllexport) #其他 #define YOURHEADER_API __declspec(dllimport) #ENDIF