vb动态加载dll的一个类-实现vb动态加载dll并动态调用dll导出的函数的一个方便办法.pdf

vb动态加载dll的一个类-实现vb动态加载dll并动态调用dll导出的函数的一个方便办法.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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,

DWORDul_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,函数名As

String,本地函数地址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本地函数地址,ByVal

VarPtr(跳转指令(0)),5,0)

If

文档评论(0)

您的专属文库 + 关注
实名认证
内容提供者

知识就是力量。祝您成功。

1亿VIP精品文档

相关文档