由多个cpp文件组成的C++项目中如何在每个源文件中调用一个DLL中的函数
VS2017C++控制台应用程序工程。有2个主要的源文件main.cpp,user.cpp,另外还有自己写的一个库文件lib.dll,之前单文件编程测试的时候库的函数是能...
VS2017 C++控制台应用程序工程。有2个主要的源文件main.cpp, user.cpp,另外还有自己写的一个库文件lib.dll,之前单文件编程测试的时候库的函数是能够正常使用的,但是一旦我把功能拆分到多个.cpp文件之后,如何让这些cpp文件能够同时都能调用DLL中的函数却有很大的问题。如果我按百度上那种动态链接的格式,先声明函数原型,然后用GetProcAddress的方法获取函数地址,然后再调用,就会出现LNK1169/LNK2011 错误:一个或多个重定义的外部符号bool __cdecl InputCNString(struct cnstr *)" (?InputCNString@@YA_NPAUcnstr@@@Z),该符号在函数 _main 中被引用。如果只在一个cpp文件中按上述做法,那么又会出现错误 LNK2019:无法解析的外部符号 "bool __cdecl InputCNString(struct cnstr *)" (?InputCNString@@YA_NPAUcnstr@@@Z),该符号在函数 _main 中被引用。所以到底应该如何调用DLL中的函数(需要怎样编写头文件,函数声明以及调用函数)才能解决原先的问题?
展开
1个回答
展开全部
首先,建议初始化dll中函数地址时用一个函数包装起来,可以这样的结构
user.h中
pCreateCNString createCNString = NULL;
....
void initFuncs(); // 这个函数用来初始化dll函数
user.cpp中
#include "user.h"
void initFuncs()
{
HMODULE hModule = LoadLibrary(...);
createCNString = GetProcAdrress(....);
...
}
main.cpp中
#include "user.h"
int main()
{
initFuncs();
...
return 0;
}
user.h中
pCreateCNString createCNString = NULL;
....
void initFuncs(); // 这个函数用来初始化dll函数
user.cpp中
#include "user.h"
void initFuncs()
{
HMODULE hModule = LoadLibrary(...);
createCNString = GetProcAdrress(....);
...
}
main.cpp中
#include "user.h"
int main()
{
initFuncs();
...
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询