2012-10-25 53 views
3

這裏是場景:如何使用COM互操作從VB6中使用結構?

我有一個VB6項目。它包含一個通過ref接收類型變量參數的方法。

Function GetFilledInfo(data As Variant) 

該方法用結構填充接收到的參數。這個結構在我的VB6項目中定義如下。

Public Type DATASTRUCTMAIN 
    structChild As DATASTRUCTCHILD 
End Type 

Public Type DATASTRUCTCHILD 
    m_bComputeRanges As Long 
End Type 

我有一個要求,參照由VB6項目產生的ActiveX DLL這種方法C#程序。

我想聲明在我的C#程序中的VB6中定義的結構,並希望通過使用VB6方法來獲取它。

我該怎麼做?

在此先感謝。

回答

2

我不禁注意到你只傳遞一個Long(除非你爲了簡潔而截斷了這些結構定義)。在這種情況下,只需更改VB6,使其暴露一個返回Long的函數!

如果你有一個真正的結構......

移動結構定義爲公共類在VB6項目。然後,通過COM公開可用於任何引用VB6項目的客戶的結構定義。

但願您將能夠在C#項目中使用它,並且您將能夠聲明該結構的實例。你在C#項目的Project References中有一個對VB6組件的引用,對吧?不太熟悉.Net COM互操作,所以不太確定。

如果您在C#項目中聲明結構實例時遇到任何問題,您可以將VB6結構更改爲類? Apparently structures can be problematic in COM interop