我对.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程序时,当我点击添加行时出现“类型不匹配”错误。
任何人都可以用简单的术语建议我可以使用这种方法吗?
答案 0 :(得分:0)
我的建议是不要乱用COM,而是将VB6代码迁移到Visual Basic.NET。使用C#来反复编组对象的问题要少得多。如果此对象与其他遗留应用程序共享,您可以创建一个COM包装器,以保持您的旧版兼容性。显然,您需要根据业务需求进行权衡。
答案 1 :(得分:0)
如果您拥有VB6源,那么我建议将Add的定义更改为ByVal而不是ByRef。几乎没有理由在VB6中使用ByRef对象引用,从我从代码中收集的一小部分内容中,您不需要在域对象中关联paranet / child关系。