• 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重现错误给弄的

    但是我自己的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,真欢乐...

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

  • 相关阅读:
    <<Rust程序设计语言>>个人版(4: 所有权)
    《逻辑学入门》笔记(45-66)
    《逻辑学入门》笔记(23-44)
    <<Rust程序设计语言>>个人版(3.3: 函数/3.4: 注释/3.5: 控制流)
    <<Rust程序设计语言>>个人版(1: 入门/2: 编写猜谜游戏)
    网站如何保护用户的密码
    在 Gin 项目中使用 WebSocket
    《逻辑学入门》笔记(1-22)
    浅谈双重认证逻辑
    某大型网络安全活动中遇到的钓鱼邮件
  • 原文地址:https://www.cnblogs.com/magicdawn/p/csharpcallvbdll.html
Copyright © 2020-2023  润新知