2012-07-13 79 views
4

我需要從一個VB6應用程序傳遞一個int或長的數組(無所謂)到一個C#COM Visible類。我試着聲明在C#中的接口是這樣的:如何從VB6傳遞一個長數組到C#通過COM

void Subscribe([MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_I4)]int[] notificationTypes) 

void Subscribe(int[] notificationTypes) 

但是他們都提出了Function or interface markes as restricted, or the function uses an Automation type not supported in Visual Basic

我該如何聲明C#方法?

+0

嗯,這很奇怪。只要刪除[MarshalAs],這個數組已經在沒有你幫忙的情況下作爲SAFEARRAY編組了。如果仍有問題,我們需要查看其餘的接口類型。 – 2012-07-13 12:45:02

+0

@HansPassant是的,我查看了生成的IDL,因爲它在兩種情況下都正確地聲明爲SAFEARRAY(long),所以我認爲它必須是與VB6相關的問題。我仍在調查。 – 2012-07-13 13:38:35

回答

1

如果您絕望了,請在虛擬VB6 ActiveX dll項目中對簽名進行編碼。然後通過Visual Studio或命令行工具生成vb6組件的.NET Interop版本。然後使用Reflector或dotPeek將代碼拉出互操作程序集。這是漫長的,但它的作品。