2012-04-04 6 views
0

.NETでCom Plus Interopサービスについてよくわかりません.Netにすべての汚い作業をさせてもらえます。まあ、今私は立ち往生しています。.NETのinteropからvb6オブジェクト型パラメータのパラメータを渡すと型の不一致が発生する

私のVS 2010 C#プログラムでVB6でコンパイルされたCOM DLLへの参照があります。これは私が作成している請求書です。

私がオブジェクトインスタンス化:

UIInvoice Invoice = new CUIInvoice(); 

をそして、私はいくつかの請求書のヘッダのプロパティを設定します。

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

そして今、私は呼び出すことで私はいくつかの請求書の明細行を、作成したいです請求書の子オブジェクトのメソッドを追加する:

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

関数の3番目のパラメータコールは私のVB6で定義されている機能を追加します。

ByRef Parent As Object 

私は、.NETプログラムを実行すると、私は追加ラインを打ったとき、私は「型の不一致」エラーが発生します。

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

+0

通常、C#では 'ref Invoice'と書いています。あなたはC#バージョン4を使用していると思います。それ以外は明らかですが、CUIInvoiceが親であることが気に入らないだけです。たぶん "UI"のため。 –

+0

こんにちはハンス、あなたの返事をありがとう。 Invoiceオブジェクトをrefで渡すと、実際にはコンパイラエラーが発生します。これはもっと知識のある人にはヒントになる可能性があります。 'ref UIInvoice.CUIInvoice'から 'refオブジェクト'に変換できません。オブジェクトtemp = Invoiceのように静的オブジェクト型を宣言すると、 refでtempを渡すと、同じ型の不一致エラーが発生します。 – user529703

+0

UIInvoiceとCUIInvoiceの違いは何ですか?請求書を次のように宣言するとどうなりますか?CUIInvoice請求書=新しいCUIInvoice(); –

答えて

0

私のお勧めは、COMに惑わされるのではなく、VB6コードをVisual Basic.NETに移行することです。あなたは、C#で前後にオブジェクトをマーシャリングするのに苦労することはありません。このオブジェクトが他のレガシーアプリケーションと共有されている場合、レガシー互換性を維持するCOMラッパーを作成することができます。明らかに、これはあなたのビジネス要件に照らして判断する必要があります。

+0

mgnoonan、ご意見ありがとうございます。私はあなたが正しいと信じています。私は、コードの移行のアイデアを短絡することを望んでいました - それは大きすぎます。これは、プロセスを開始する正当な理由となる可能性があります。 – user529703

+0

これは通常どのように起動するのですか?しかし、最後に、マイグレーションしてマイグレーションを行うよりも、多くの問題と包帯ソリューションが必要になります。あなたは長期的にはより良くなるでしょう。 – mgnoonan

0

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

関連する問題