[英]Passing vb6 object type parameter byref from .NET interop causes Type Mismatch
我不太了解 Com Plus .NET 中的互操作服务 - 我让 .NET 完成所有肮脏的工作,我祈祷它会起作用。 好吧,现在我被困住了。
我在我的 VS 2010 C# 程序中引用了 COM DLL 和 VB6。 这是我正在创建的发票。
我实例化了一个 object:
UIInvoice Invoice = new CUIInvoice();
然后我设置一些 invoice header 属性:
Invoice.set_InvoiceType("VO");
Invoice.set_InvoiceTypeID(2);
现在,我想创建一些发票明细行,这是通过调用发票的子 object 的添加方法来实现的:
Invoice.InvoiceDetails.Add("StringParam1", "StringParam2", Invoice);
function调用的第三个参数定义在我的VB6添加function为:
ByRef Parent As Object
当我运行我的 .NET 程序时,当我点击添加行时出现“类型不匹配”错误。
任何人都可以用简单的方式建议我可以让它工作的方法吗?
我的建议是不要乱用 COM,而是将 VB6 代码迁移到 Visual Basic.NET。 使用 C# 来回编组对象的问题会少得多。如果此 object 与其他遗留应用程序共享,则您可以创建一个 COM 包装器来保持您的遗留兼容性。 显然,您需要根据您的业务需求权衡这一点。
如果您拥有 VB6 源,那么我建议将 Add 的定义更改为 ByVal 而不是 ByRef。 几乎没有理由在 VB6 中使用 ByRef object 引用,并且从我从您的代码中收集到的一点点,您不需要在域对象中关联 par.net/child 关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.