- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
vb动态加载dll的一个类,实现vb动态加载dll并动态调用dll导出的函数的一个方便办法
自从会vb用调用动态库函数以来,我一直在想:如何动态的调用dll里的函数?网上有一个用CallWindowProc函数的方法,不过我还是喜欢自己有个
办法.今天工夫不负有心人,我终于把我心中一直想的办法给实现了,干脆就往自己的空间上贴吧.错误的地方,希望可以得到有这方面的师傅给以
指正,以求进步!对于系统api我没有尝试,如果调用约定相符,应该适用于对系统api的调用.
我自己用c写个dll,然后在vb里写了这个类.
以下代码只是我简单的实现,主要的是看实现的道理.
vc代码:
///
我把dll文件名命名为:dll
#includeWindows.h
#includestdlib.h
#includestring.h
#includestdafx.h
BOOLAPIENTRYDllMain(HANDLEhModule,
DWORD?ul_reason_for_call,
LPVOIDlpReserved
)
{
returnTRUE;
}
externCBOOL_declspec(dllexport)add(inta)
{
MessageBoxA(NULL,运行在dll里!,成功,MB_OK);
a=999;
return1;
}
///
vb代码:
类代码:
Private状态标志AsBoolean
Private模块句柄AsLong
Private本地函数地址备份(0To4)AsByte
Private被替换函数的地址AsLong
PublicFunction替换函数地址(模块名AsString,函数名AsString,本地函数地址AsLong)AsBoolean???????
If0=本地函数地址Then
替换函数地址=0
ExitFunction
EndIf???????
被替换函数的地址=替换函数地址
Dim函数地址AsLong
DimaAsLong
Dim跳转指令(0To4)AsByte??????
加载模块
模块句柄=LoadLibrary(模块名)
If0模块句柄Then
状态标志=1
Else:
替换函数地址=0
ExitFunction
EndIf
检索函数地址
函数地址=GetProcAddress(ByVal模块句柄,ByVal函数名)
If0函数地址Then
状态标志=1
Else
替换函数地址=0
ExitFunction
EndIf
计算跳转地址
a=函数地址-(本地函数地址+5)
构造跳转地址
跳转指令(0)=233
a=WriteProcessMemory(-1,ByValVarPtr(跳转指令(1)),ByValVarPtr(a),4,0)
If0=aThen
替换函数地址=0
ExitFunction
EndIf
先备份本地函数入口指令
a=WriteProcessMemory(-1,ByValVarPtr(本地函数地址备份(0)),ByVal本地函数地址,5,0)
If0=aThen
替换函数地址=0
ExitFunction
EndIf
写入跳转指令
a=WriteProcessMemory(-1,ByVal本地函数地址,ByValVarPtr(跳转指令(0)),5,0)
If0=aThen
替换函数地址=0
ExitFunction
Else:
状态标志=1
替换函数地址=1
EndIf
EndFunction
PublicFunction还原函数地址()AsBoolean
If0=状态标志Then
还原函数地址=0
ExitFunction
EndIf
DimaAsLong
a=WriteProcessMemory(-1,ByVal被替换函数的地址,ByValVarPtr(本地函数地址备份(0)),5,0)
If0=aThen
还原函数地址=0
ExitFunction
Else:
状态标志=0
还原函数地址=1
EndIf
FreeLibrary模块句柄
EndFunction
PublicFunction当前状态()AsBoolean
当前状态=状态标志
EndFunction
vb普通模块代码:
读写内存的api函数
PublicDeclareFunctionWriteProc
您可能关注的文档
- 《市场天道:资本市场的操盘密码》记录.docx
- 焦油渣提纯扩建项目环境影响报告书.docx
- 所有打印机硒鼓对照表.docx
- 压力蒸汽灭菌法.ppt
- 2023年辽宁省鞍山市中考生物一模试卷+答案解析.pdf
- 2023年江苏省盐城市建湖县海南中学中考数学仿真试卷+答案解析.pdf
- 2023年江苏省苏州市中考数学考前模拟预测卷+答案解析.pdf
- 2023年江苏省苏州中学园区校中考数学二模试卷+答案解析.pdf
- 2023年江苏省苏州十六中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市海门区中考数学一模试卷+答案解析.pdf
- 2023年江苏省镇江市润州区中考生物二模试卷+答案解析.pdf
- 2023年江苏省徐州市邳州市运河中学中考生物二模试卷+答案解析.pdf
- 2023年江苏省苏州市吴中区中考冲刺数学模拟预测卷+答案解析.pdf
- 2023年江苏省南通市崇川区田家炳中学中考数学四模试卷+答案解析.pdf
- 2023年江西省吉安市中考物理模拟试卷(一)+答案解析.pdf
- 2023年江苏省泰州市海陵区九年级(下)中考三模数学试卷+答案解析.pdf
- 2023年江苏省苏州市高新二中中考数学二模试卷+答案解析.pdf
- 2023年江苏省南通市九年级数学中考复习模拟卷+答案解析.pdf
- 2023年江苏省南通市海安市九年级数学模拟卷+答案解析.pdf
- 2023年江苏省泰州市靖江外国语学校中考数学一调试卷+答案解析.pdf
文档评论(0)