调用DLL文件及函数

继上一步创建了Audit_ChargeSystem_GLWAPI.dll后,下一步开始测试dll的调用及功能

上一步创建dll的步骤,链接如下https://blog.csdn.net/sunflower_della/article/details/82663154

在解决方案中继续创建一个win32控制台工程,工程名为TestDll,会自动生成一个TestDll.cpp的文件

Step 1:定义函数

typedef int (*p_fnAudit_ChargeSystem)(const char* logPath);

函数的参数,必须与导出函数的参数一致

Step 2:

在main函数中添加如下代码:

int _tmain(int argc, _TCHAR* argv[])
{
	p_fnAudit_ChargeSystem pfn;
	HMODULE hMo = LoadLibrary("Audit_ChargeSystem_GLWAPI.dll");
	if (hMo == NULL) {
		printf("LoadLibrary Audit_ChargeSystem_GLWAPI.dll error!\n");
		return 0;
	}

	pfn = (p_fnAudit_ChargeSystem)GetProcAddress(hMo, "audit_ChargeSystem_GLWAPI");
	if (pfn == NULL) {
		printf("%s", GetLastError());
		printf("can't find audit_ChargeSystem_GLWAPI function!\n");
		return 0;
	}

	char* logPath = "C:\\IBAlog\\";
	bool bRes = pfn(logPath);
	if (bRes) 
		printf("logPath=%s", logPath);
	else
		printf("GetDomainIdNetbarId error:%d\n", bRes);

	/*char* logPath = "C:\\IBAlog\\";
	bool bRet = audit_ChargeSystem_GLWAPI(logPath);*/

	printf("press any key:");
	getchar();
	return 0;

}

pfn就指向了dll中函数的地址,带入参数,可执行对应的dll功能

本工具可以列出所有指定DLL文件中的所有导出函数和他们的虚拟内存地址。你可以很方便地复制所需函数的内存地址,粘贴到你的调试器中,并在这个内存地址中设置断点。当这个函数调用时,调试器将会在函数开始时中断。例如:如果你想在每次显示信息对话框时进行中断,只需把断点设置在信息对话框函数的内存上:MessageBoxA, MessageBoxExA, 和MessageBoxIndirectA (对于Unicode程序则是 MessageBoxW, MessageBoxExW, 和MessageBoxIndirectW)。当其中一个信息对话框函数调用时,你的调试器会在函数入口处中断,这样你就可以查看调用堆栈和倒退到初始化这个API函数的代码中。 DLL Export Viewer不需要任何安装过程或额外的DLL,为了开始使用它,只需运行可执行文件 - dllexp.exe DLL Export Viewer加载时,你要选择下列一个选项: *载入标准系统DLL(user32,kernel32等)中的所有函数:这是默认选项。如果你选择它,会导出Windows标准DLL(kernel32.dll,user32.dll,等等...)中的API函数。 *从指定的DLL文件中加载函数:如果您选择此选项时,您必须在下面的文本框中指定DLL。您也可以使用通配符指定多个DLL文件。如果你要查看你系统所有的API函数,您可以指定类似'c:\windows\system32\*.dll'的表达式 -但我必须提醒你...你会得到一个非常长的列表函数,可能超过五万个函数! *载入以下文本文档(回车分隔)中指定DLL中的函数:如果您选择此选项,指定文本文件应包含一个DLL文件列表中,回车字符(CR-LF)分隔。全部指定的DLL中的导出函数将被加载。 *载入与所选进程关联的全部 DLL 中的函数:这是本程序最有用的工具调试选项。选择你正在调试的进程,之后所以与选定的进程相关的DLL导出的函数都会被显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值