2012-07-13 77 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将代码拉出互操作程序集。这是漫长的,但它的作品。