C#调用VB6写的ActiveX Dll

搜索了很多资料,下载了Demo:http://download.csdn.net/detail/xieguoxian/2747484然后在同学电脑上测试才弄好...记录下

(一)

前期搜索资料:

  VB写好的DLL,在C#里面添加引用,就会有与DLL同名的namespace,vb6的类模块变成interface,但是可以new出来调用,调用就是出错,说是未注册类...

    具体提示是: COM类工厂中CLSID为{......}的组件时失败,原因是出现以下错误:80040154

  于是手动regsvr32 mydll.dll,提示成功,但还是运行就报错...跟上面一样,说是未注册类...

再次搜索,下载到最上面的Demo,刚打开运行,就是跟上面报错一样...运行demo中的dll注册就弄好了,demo中的可以运行...

这张图是我问题解决后,regsvr32 /u testdll.dll重现错误给弄的

C#调用VB6写的ActiveX Dll

但是我自己的vb C# code就算是手动注册还是没辙.......郁闷啊

(二)

我尝试引用下载的demo中的DllTest.dll,我new调方法,对于同一个dll,demo中可以运行,我自己新建的不行

问题定位到我的C#项目上来了,于是千找万找,找到下面这不同...

  C#调用VB6写的ActiveX Dll

  这是demo中的dlltest属性

  C#调用VB6写的ActiveX Dll

  这是我的Winform引用中的Dlltest

不同点就是,路径 obj\[x86\]debug\......

一个有demo中的有x86,我的没有,我系统是64位,于是尝试将 项目-生成-目标平台改成x86,皆大欢喜,可以运行了...

C#调用VB6写的ActiveX Dll

(三)

这个x86 x64 AnyCpu我不太懂什么区别,改完了就可以运行

发现,其实在VS里面不用手动注册,但分发给别人用的时候,记得把dll也带进去,想办法在客户机上注册

VB代码

 Public Function Haha(str As String) As String
MsgBox str
Haha = "string返回值"
End Function

C#就一个窗口,一个按钮

        private void button1_Click(object sender, EventArgs e)
{
string vbreturn=new MYDll.WoHuiLe().Haha("c#传给VB函数的,在vb里面msgbox");
MessageBox.Show(vbreturn);
}

弹两次MsgBox,真欢乐...

手动注册不方便,去写个小工具吧...

上一篇:ThinkPHP运算符与PHP运算符对照表


下一篇:新安装mysql,如何提升mysql安全性