我有一个相对简单的 C#class,我想将其编码到 VB 项目中。它看起来像这样(我为这篇文章做了一些简化):
[Guid("AAAAAAAA-AAAA-AAAA-AAAA-123456789ABC", ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
[ProgId("MyBiz.MyResponse")
[Serializable]
public class MyResponse
{
public bool Success { get; set; }
public int ID{ get; set; }
public string Location{ get; set; }
public ArrayList Messages { get; set; }
}
消息包含 0 个或多个字符串。我编译它并创建一个类型库供 VB6 使用。就从简单类型传递的数据而言,一切都很好,但是 Messages 变量,虽然 VB 运行时将它识别为 ArrayList,但即使应该包含任何数据也不包含任何数据。就编码数据而言,我缺少什么?我知道泛型不会编码,但我相信 ArrayList 会。我是缺少某个属性还是其他什么?
不需要提供替代解决方案,因为我问这个是因为我想知道如何去做,而不是因为如果我可以让它工作我没有替代方案。谢谢!
最佳答案
处理此问题的一种方法是使用 COM SafeArray 在 .NET 和 COM 之间来回传递数据。与 ArrayList 相比,我对这种技术的运气更好。您的消息声明可能如下所示:
[return: MarshalAs(UnmanagedType.SafeArray, SafeArraySubType = VarEnum.VT_BSTR)]
public string[] Messages
这将在 VB6 或类似的 COM 客户端中被视为
Public Messages() as String
字符串的 COM SafeArray。
关于c# - 将 .NET ArrayList 编码到 VB6 [Com interop],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26495861/