2012-09-17 48 views
4

我在c#.net中編寫了一個dll,它調用應用程序中的另一個第三方.NET dll。在VB6應用程序中使用.NET dll

Assembly u = Assembly.LoadFrom(dllLocation); 
Type t = u.GetType("MyLIB.CLass"); 
MethodInfo m = t.GetMethod("Method"); 
object[] myparam = new object[1]; 
myparam[0] = fileLocation; 
result = (string)m.Invoke(null, myparam); 

請注意,某些文件被該DLL初始時以及使用位置中加載:當我寫在C#.NET控制檯應用程序測試它使用以及下面的代碼也能正常工作:

string path = Assembly.GetExecutingAssembly().Location; 
    path = Path.GetDirectoryName(path); 

但問題是,當我嘗試使用VB6調用它,我得到一個錯誤,它無法加載第三方DLL。請幫忙,因爲我似乎不知道發生了什麼。

+0

什麼是確切的錯誤?你有沒有檢查它在正確的位置? – MarkJ

+0

確切的錯誤是「它無法找到第三方DLL或其中一個依賴關係丟失」。請問如何檢查它是否在VB6的當前位置? – Jay

+0

看起來像你需要檢查提供給你的第三方DLL的供應商,並要求COM互操作支持。 – Turbot

回答

4

我想給你更詳細,以便.NET程序集暴露給COM

你需要生成tbl - type library

使用RegAsm /tlb: MyLIB.tlb MyLIB.dll

準則揭露.NET COM的類型,並確保你能應付這種情況。如 聲明ComVisibleAttribute,需要一個公共的默認構造函數是對COM可見,如在

你可以參考,在 How to call a Visual Basic .NET or Visual Basic 2005 assembly from Visual Basic 6.0

+0

我已經指定了必要的ComVisibleAttribute爲true,生成了類型庫,並且還註冊了程序集,但記得我的.NET dll引用了第三方dll。這是錯誤彈出的位置,但我無法指定第三方DLL的ComVisibleAttribute。有沒有其他解決方法? – Jay

+0

您已將此標記爲答案,但您的評論表明您希望VB6代碼直接訪問第三方DLL。只需確認這一點是不可能的,但是您可以隨時將具有'ComVisibleAttribute'的代碼添加到您可以控制的DLL中,從而將這些調用直接傳遞給第三方DLL。 –

+0

在這種情況下,您無法直接訪問.NET Dll引用,但可以創建接口並在.NET類中顯式實現它們,並生成用於VB6引用的COM互操作。我發佈的鏈接提供了「指導方針」。 – Turbot

3

您需要在程序集上指定ComVisibleAttribute才能從VB6調用它。

+0

我已經指定了必要的ComVisibleAttribute爲true,但回想一下,我的.NET DLL引用了第三方DLL。這是錯誤彈出的位置,但我無法指定第三方DLL的ComVisibleAttribute。有沒有其他解決方法? – Jay

相關問題