vb动态调用DLL的问题

dciw 2011-05-30 10:45:50
一个连接接口DLL,正常调用时 先注册DLL文件,vb中引入,创建对象都没问题;
Dim objComm As HsCommX.Comm '定义对象
objComm = CreateObject("HsCommX.Comm")
objComm.Create() '创建对象
…………
但这种方式在多线程调用的情况下性能就会急剧下降。


目前是想改成动态调用的方式,在不同的目录下放置多个DLL,但在VB.net里实在不知道怎么实现
常使用反射, Dim AssDLL As Assembly
AssDLL = System.Reflection.Assembly.LoadFile("C:\WINDOWS\system32\HsCommX.dll") '载入程序集到AssDLL中.
Dim DLLType As Type = AssDLL.GetType("HsCommX.Comm") '获取Free命名空间中的类MainFunction的类型.
Dim NewObj As Object = Activator.CreateInstance(DLLType) '实例Type DLLType获取到的类型的对像


Dim m As MethodInfo = DLLType.GetMethod("Connect") '从DLLType获取AttachCode这个方法
m.Invoke(NewObj, Nothing)

Assembly.LoadFile 直接异常,报“该模块应包含一个程序集清单”,实在是不明白~就算把HsCommX.dll所有引用的DLL放到同一个C:\1\的目录下, Load或者LoadFile("C:\1\HsCommX.dll") 也报这个异常。没怎么用过COM组件,不明白。


还有C里常见的LoadLibrary这类写法,在vb.net不知道怎么实现
Dim lb As Long, pa As Long
lb = LoadLibrary("C:\WINDOWS\system32\HsCommX.dll")
pa = GetProcAddress(lb, "DllGetClassObject")

FreeLibrary(lb)
...全文
166 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
f1305147 2011-05-31
  • 打赏
  • 举报
回复
1F正解。
lhblxm 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zenggang999 的回复:]

一、
比如我事先写了一个类,如下:
Public Class TestClass
Public Function Add(ByVal add1 As Integer, ByVal add2 As Integer) As Integer
Return add1 + add2
End Function
End Cla……
[/Quote]

学习下
zenggang999 2011-05-30
  • 打赏
  • 举报
回复
一、
比如我事先写了一个类,如下:
Public Class TestClass
Public Function Add(ByVal add1 As Integer, ByVal add2 As Integer) As Integer
Return add1 + add2
End Function
End Class

然后编译成了ClassDll.dll文件.

二、
在另一个程序中,我写入了如下代码
Public Function Add(ByVal add1 As Integer, ByVal add2 As Integer) As Integer
Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.LoadFile("ClassDll.dll")
Dim classtemp As Type = asm.GetType("ClassDll.dll.TestClass")
Dim obj As Object = asm.CreateInstance(classtemp.FullName)
Dim me_Info As System.Reflection.MethodInfo = classtemp.GetMethod("Add")
Dim paramter(1) As Object
paramter(0) = add1
paramter(1) = add2
Return me_Info.Invoke(obj, paramter)
End Function

执行上面的Add函数其功能和执行一中的Add函数是一样的。

上面的 System.Reflection.Assembly.LoadFile("ClassDll.dll")这一句里的ClassDll.dll是我们编译的那个dll文件。如果其不是放在程序目录 下,这里必须换成ClassDll.dll的绝对路径。即就是你dll文件的绝对路径

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧