當前位置:歷史故事大全網 - 故事大全 - vb动态调用动态链接库

vb动态调用动态链接库

关于你的问题,我有一些建议。

1、对于资源的浪费问题。动态加载实际上是已经存在的,一个Dll中可能包含很多的函数,而且Dll文件本身可能很少,几百兆的已经是大文件了,对于现在考虑的系统硬件来说,这些资源的开销应该不是重点的问题。当然,这里没有给你设计什么样的一个软件,所以姑且做这个假设。实际上如果Dll只在函数被使用时加载,不用时就卸载,效率本身就会受到影响。目前Dll都是加载后存在于内存中,直到程序关闭才会卸载。这样实际上面就是用空间换时间,牺牲内存换取效率,这是普遍采用的方法。我认为如果不是要牺牲效率换取内存空间的时候,最好不要在这上面浪费时间。

2 、VB的语法已经确定了不能直接实现你的要求。大多数语言实际上都要求如果你用到某个Dll里面的函数,都需要预先指定,然后在程序中调用里面。你可以进行一些API设计一套调用机制来实现。

以下流程可以参考:

(1)使用LoadLibrary加载Dll

(2)使用GetProcAddress获取函数地址

(3)使用CallAnyFunc调用这个函数( CallAnyFunc的代码如下,感谢该代码作者,详细信息可以在网上找到)

声明区:

Private Declare Function CallAsmCode Lib "user32" Alias "CallWindowProcA" (lpPrevWndFunc As Long , ByVal hWnd 只要, ByVal Msg 只要, ByVal wParam 只要, lParam) 只要

代码区:

私有函数 CallAnyFunc(ByVal pFn As Long, ByVal pParam)只要,ByVal 计数一样长

Dim CallAnyFuncCode(34) 只要,lRet 只要

CallAnyFuncCode(0) = amp;H53EC8B55

CallAnyFuncCode(1) = amp;HE8amp;

CallAnyFuncCode(2) = amp;HEB815B00

CallAnyFuncCode(3) = amp;H1000112C

CallAnyFuncCode(4) = amp;H114A938D

CallAnyFuncCode(5) = amp;H64521000

CallAnyFuncCode(6) = amp;H35FFamp;

CallAnyFuncCode(7) = amp;H89640000

CallAnyFuncCode(8) = 放大器;H25amp;

CallAnyFuncCode(9) = 放大器;H8B1FEB00

CallAnyFuncCode(10) = 放大器;HE80C2444

CallAnyFuncCode(11) = amp;H0amp;

CallAnyFuncCode(12) = amp;H53E98159

CallAnyFuncCode(13) = amp;H8D100011

CallAnyFuncCode (14) = amp;H119791

CallAnyFuncCode(15) = amp;HB8908910

CallAnyFuncCode(16) = amp;H33000000

CallAnyFuncCode(17) = amp ;H558BC3C0

CallAnyFuncCode(18) = amp;H104D8B0C

CallAnyFuncCode(19) = amp;

HEB8A148D

CallAnyFuncCode(20) = 放大器;HFC528D06

CallAnyFuncCode(21) = 放大器;HB4932FF

CallAnyFuncCode(22) = 放大器;H8BF675C9

CallAnyFuncCode(23) = amp;HD0FF0845

CallAnyFuncCode(24) = amp;H58F64

CallAnyFuncCode(25) = amp;H83000000

CallAnyFuncCode( 26) = amp;H4D8B04C4

CallAnyFuncCode(27) = amp;H5B018914

CallAnyFuncCode(28) = amp;H10C2C9

CallAnyFuncCode(29) = amp; H58F64

CallAnyFuncCode(30) = 放大器;H83000000

CallAnyFuncCode(31) = 放大器;HC03304C4

CallAnyFuncCode(32) = 放大器;H89144D8B

CallAnyFuncCode(33) = amp;HC2C95B21

CallAnyFuncCode(34) = amp;H90900010

CallAnyFunc = CallAsmCode(CallAnyFuncCode(0), pFn, pParam, Count, lRet)

如果 CallAnyFunc lt;gt;lRet 那么

CallAnyFunc = 0 '±í??í?ó??±????????·?·?

Debug.Assert False '?ò?????3?ò???·?·??×÷?

结束 If

结束函数

  • 上一篇:2020初中英语教研组学期工作总结范文
  • 下一篇:N-异丙基丙烯酰胺是什么,有什么用途啊?
  • copyright 2024歷史故事大全網