我们先做了测试:(VB)
1、先选择"文件"--> -->"新建"-->"项目"
添加1个窗体一个bas文件
from1.frm 添加一个button
Private Sub Command1_Click()
Dim ArgList() As ComDll.ComTempStruct
Call getVbFun4(ArgList())
Erase ArgList
End Sub
Module1.bas
Public Function getVbFun4(ByRef oo2() As ComDll.ComTempStruct) As Long
Dim ooObj As New ComDll.ComClass
Dim oo1 As ComDll.ComTempStruct
Const N_MAX = 10000
Dim nlen As Long
nlen = N_MAX
ReDim oo2(nlen)
oo1.v1 = 1000
bb = ooObj.vbFun4(oo2, nlen)
MsgBox Format(bb)
End Function
VS2008端创建一个转换类
2.ComClass.cs
public int vbFun4(ref ComTempStruct[] f,int n)
{
return n;
}
3、编译此项目前,先设置"项目"-->"属性"-->"生成"下的"为COM Interop 注册"打上勾,
4.原有AssemblyInfo.cs文件中的"[assembly: ComVisible(false)]"修改为"[assembly: ComVisible(true)]"保存,编译即可
COM Interop 注册挑中的情况下编译Com.dll就加入到了windows的dll库中。
这个时候在vb6端的引用中直接引用这个dll了
以上是测试代码,仅考虑了是否正确调用函数,假使想让VB调用.net DLL时显示提示该类中的方法等,需要在DLL编写时添加额外的代码。