从.NET interop传递vb6对象类型参数byref会导致类型不匹配

时间:2012-04-04 19:01:27

标签: c# vb6 interop

我对.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添加函数中定义为:

ByRef Parent As Object

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

任何人都可以用简单的术语建议我可以使用这种方法吗?

2 个答案:

答案 0 :(得分:0)

我的建议是不要乱用COM,而是将VB6代码迁移到Visual Basic.NET。使用C#来反复编组对象的问题要少得多。如果此对象与其他遗留应用程序共享,您可以创建一个COM包装器,以保持您的旧版兼容性。显然,您需要根据业务需求进行权衡。

答案 1 :(得分:0)

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