2010-05-07 109 views
1

我有一個C#和COM的問題。 :(C#和com vb6

[Guid("f7d936ba-d816-48d2-9bfc-c18be6873b4d")] 
[ComVisible(true)] 
[ClassInterface(ClassInterfaceType.None)] 
public class Process : IProcess 
{ 

    public Process() 
    { 
    } 

    public int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount) 
    { 
     return 10; 
    } 
} 

[ComVisible(true)] 
[Guid("5c640a0f-0dce-47d4-87df-07cee3b9a1f9")] 
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] 
public interface IProcess 
{ 
    int UpdateBalance(string accountNumber, string adminEventDescription, decimal curAmount); 
} 

而VB代碼

Private Sub Command1_Click() 
    Dim test As Object 
    Set test = New Forwardslash_PlayerTrackingSystem_Api.Process 
End Sub 

我得到以下

ActiveX組件不能創建對象?

回答

1

你有沒有打勾的 「註冊爲COM Interop」在項目屬性框?

+0

是的,我做了:)但它不能正常工作:) – 2010-05-07 08:20:04

1

你有ProgID還定義了C#源代碼中的?您的示例代碼似乎沒有包含它。 (或者你是否正在使用現有的類型庫,並以某種方式通過GUID在VB中創建對象?)

而且是在VB代碼運行的計算機上的註冊表中正確註冊的C#組件?當您使用regasm.exe工具自行構建和/或註冊時,請參閱Paolo的答案,讓VisualStudio爲您做到這一點。此工具相當於「真實」COM對象的regsrv32.exe,但是隨後在註冊表中註冊了適當構建的.NET程序集以供COM使用。

+0

如果我在本地機器上執行regasm,那麼會出現自動化錯誤。那說 系統找不到指定的文件 – 2010-05-07 08:16:20

+1

@Jim「系統找不到指定的文件」< - 您不能忽略那^^驗證註冊表項並確保它們與現實匹配。確保沒有陳舊的數據,重複的CLSID,或機器與用戶CR等的陰影。 – 2010-05-07 08:59:23

1

您的[接口類型]屬性是錯誤的。 VB6需要一個IDispatch接口,它不能處理一個IUnknown接口。它最喜歡ComInterfaceType.InterfaceIsDual,它生成一個完整的類型庫,在VB6編輯器中啓用IntelliSense,比後期綁定的IDispatch快大約1000倍。

0

使用regasm/codebase如果程序集未在GAC中註冊,則必須使用開關。