各位从事应用开发工作的小伙伴们,我们在以往的项目开发工作中经常会调用三方的DLL ,突然有一天我们发现DLL 的.LIB 和.H 文件丢失了,这让我们无法应用该DLL 到我们的项目中,是不是感觉相当的郁闷。现在让我分享一种方法给大家去解决这个问题。
首先我们得获取该DLL 得导出函数,就是知道我们能使用该库得哪些函数名。我们可以用dumpbin 这个命令查询DLL 中的导出函数。例如我们有Test.dll 这个动态库。
DUMPBIN /EXPORTS DTest.dll
ordinal hint RVA name
0 000110AF DPrintHello
此时我们看到的函数名称,但无法看到函数的参数有哪些,如果这个函数没有参数,那么我们用下面的方法就可以实现无导入库的库函数调用,因为我们没有该DLL 的导入库这就需要我们用LoadLibrary显示链接该DLL并根据我们查询到的导出函数名利用GetProcAddress查询该函数指针地址并执行该函数,过程如下:
//定义DLL 库函数指针类型,用于接收查询得库函数指针。
typedef int(*pDLLFUNC)();
HINSTANCE hDll; //DLL句柄
pDLLFUNC DprintPro; //函数指针
//装载DLL 库
hDll = LoadLibrary(" DTest.dll ");
if (hDll != NULL)
{
//查询DLL 中名称为DPrintHello 得函数并返回指针
DprintPro= (pDLLFUNC)GetProcAddress(hDll, "DPrintHello");
DprintPro (); //执行获得函数指针
}