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);

関数呼び出しの 3 番目のパラメーターは、私の VB6 Add 関数で次のように定義されています。

ByRef Parent As Object

.NET プログラムを実行すると、[追加] 行をクリックすると「型が一致しません」というエラーが表示されます。

簡単に言えば、これを機能させる方法を誰かが提案できますか?

4

2 に答える 2

0

VB6 ソースを所有している場合は、Add の定義を ByRef ではなく ByVal に変更することをお勧めします。VB6 で ByRef オブジェクト参照を使用する理由はほとんどありません。また、コードから収集した小さな部分から、ドメイン オブジェクトで paranet/child リレーションシップを関連付ける必要はありません。

于 2012-04-06T12:47:04.817 に答える
0

私のお勧めは、COM をいじるのではなく、VB6 コードを Visual Basic.NET に移行することです。C# を使用してオブジェクトをマーシャリングする際の問題は、はるかに少なくなります。このオブジェクトが他のレガシ アプリケーションと共有されている場合、レガシ互換性を維持する COM ラッパーを作成できる場合があります。明らかに、これをビジネス要件と比較検討する必要があります。

于 2012-04-05T12:59:04.920 に答える