0

我对 .NET 中的 Com Plus Interop 服务了解不多——我让 .NET 做所有的脏活,我祈祷它会工作。好吧,现在我被困住了。

我在我的 VS 2010 C# 程序中引用了一个用 VB6 编译的 COM DLL。这是我正在创建的发票。

我实例化一个对象:

UIInvoice Invoice = new CUIInvoice();

然后我设置了一些发票标题属性:

Invoice.set_InvoiceType("VO");
Invoice.set_InvoiceTypeID(2);

现在,我想创建一些发票明细行,我通过调用发票子对象的 add 方法来实现:

Invoice.InvoiceDetails.Add("StringParam1", "StringParam2", Invoice);

函数调用的第三个参数在我的 VB6 Add 函数中定义为:

ByRef Parent As Object

当我运行我的 .NET 程序时,当我点击 Add 行时出现“类型不匹配”错误。

任何人都可以用简单的术语提出一种我可以让它工作的方法吗?

4

2 回答 2

0

My recommendation would be to not fool around with COM, but migrate the VB6 code to Visual Basic.NET. You'll have much less problems marshalling objects back and forth with C#. If this object is shared with other legacy applications, you may be able to create a COM wrapper that maintains your legacy compatibility as well. Obviously you need to weigh this against your business requirements.

于 2012-04-05T12:59:04.920 回答
0

如果您拥有 VB6 源代码,那么我建议将 Add 的定义更改为 ByVal 而不是 ByRef。几乎没有理由在 VB6 中使用 ByRef 对象引用,并且从我从您的代码中收集到的一点点,您不需要在域对象中关联 paranet/child 关系。

于 2012-04-06T12:47:04.817 回答