搜索了很多資料,下載了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,真歡樂...
手動注冊不方便,去寫個小工具吧...