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,真歡樂...

 

手動注冊不方便,去寫個小工具吧...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM