C调用dll文件

一种方式是使用Lib文件,配合dll文件;另外一种是动态调用。

例如写了一个库的项目,导出函数的声明如下:

/*生成一个随机数p,1<=p<=x*/
extern "C" __declspec(dllexport) unsigned int RandomUINT(unsigned int x);

编译后会有*.lib和*.dll文件。首先这里要澄清一下这个lib文件。通常lib文件分两种,一种是静态链接库,包含了函数等数据的代码,这个不在此讨论范围;另外一种是配合dll文件使用的,这里面没有代码,这个lib用于静态调用dll,我们要讨论的就是这种lib。

静态调用

在使用这个函数的文件中加上:

//静态链接
#pragma   comment(lib, "E:\\Test\\Debug\\xddll.lib")
extern "C" __declspec(dllexport) unsigned int RandomUINT(unsigned int x); 

然后就可以在代码中像调用本地函数一样,愉快地调用这个函数了。

在可执行文件编译完成以后,lib文件可以删除,但是dll文件还是要保留的。

动态调用

这个稍微麻烦,但是更常见一些,毕竟很多都是直接丢给你一个dll文件。

首先,你要根据函数原型,定义一个函数指针,这个不是必须的,但是会比较方便:

typedef unsigned int (*DLLRandomINT)(unsigned int);

接下来就是如何在代码中使用:

HMODULE hLib = LoadLibrary(TEXT("xddll.dll"));
DLLRandomINT rndint=(DLLRandomINT)GetProcAddress(hLib, "RandomUINT");
cout << rndint(50) << endl;

测试图省事,没有做加载调用和转换的检测(假设加载是成功的)。

posted @ 2019-12-03 19:43  castor_xu  阅读(2786)  评论(0编辑  收藏  举报