C#调用VB6写的ActiveX Dll_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > C#调用VB6写的ActiveX Dll

C#调用VB6写的ActiveX Dll

 2013/11/2 13:19:34  magicdawn  博客园  我要评论(0)
  • 摘要:搜索了很多资料,下载了Demo:http://download.csdn.net/detail/xieguoxian/2747484然后在同学电脑上测试才弄好...记录下(一)前期搜索资料:VB写好的DLL,在C#里面添加引用,就会有与DLL同名的namespace,vb6的类模块变成interface,但是可以new出来调用,调用就是出错,说是未注册类...具体提示是:COM类工厂中CLSID为{......}的组件时失败,原因是出现以下错误
  • 标签:C#

搜索了很多资料,下载了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重现错误给弄的

 

 

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

(二)

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

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

  

  这是demo中的dlltest属性

 

  

  这是我的Winform引用中的Dlltest

 

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

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

 

 

(三)

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

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

 

VB代码

1 Public Function Haha(str As String) As String
2     MsgBox str
3     Haha = "string返回值"
4 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,真欢乐...

 

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

 

上一篇: 一个通用的数据库访问组件(一) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名