再谈Windows下使用DLL
在Windows下使用静态库和动态库中介绍了使用.h文件、.lib导出库文件、.dll文件动态链接库三件套的方式隐式链接来使用动态链接库的,后来又研究了一下显示调用的方式,遇到不少问题,在这里学习分享一蛤。
显式链接
显式链接是应用程序在执行过程中随时可以加载DLL文件,也可以随时卸载DLL文件,这是隐式链接所无法作到的,所以显式链接具有更好的灵活性,对于解释性语言更为合适。
不需要对项目进行特殊配置,直接上代码:
#include "Windows.h"
#include <iostream>
#include "AtlBase.h"
#include "AtlConv.h"
//函数指针
typedef double(*pAdd)(double, double);
typedef int( *pTest)();
int main()
{
double a = 1.2;
double b = 2.5;
//加载DLL文件,这里需要使用绝对路径,由于我事先已经将其拷贝到
//Debug目录下,因此直接给出DLL名
HINSTANCE hDll = LoadLibrary("DynamicMath.dll");
if (NULL != hDll)
{
//fnDynamicMath是DLL示例中写好的导出函数。
pTest fp1 = pTest(GetProcAddress(hDll, "fnDynamicMath"));
if (NULL!=fp1)
{
std::cout <<

本文详述了在Windows环境中使用DLL进行显式链接的方法,包括遇到的问题及三种解决方案:通过索引定位函数、使用extern "C"避免名称混淆和通过.def文件导出函数。此外,还提到了Depends.exe工具在确定函数索引和符号名称中的作用。
最低0.47元/天 解锁文章
1336

被折叠的 条评论
为什么被折叠?



