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;
测试图省事,没有做加载调用和转换的检测(假设加载是成功的)。