2009-04-19 16 views
0

私たちは大きなvb6アプリケーションを持っており、変更/修正が必要なので、フレームワーク2.0を対象としたセクションを.netに移動しています。我々はクラスの束を.net dllに移動し、comに適切に公開されるように適切に設定されています。.Net COM DLLがvb6からappdomainsを超えて動作しない

ここに問題があります:MainAppVB6.exeはDOTNET_COM.ComClassをインスタンス化します。それは、これをappdomainに渡すdifferennet dllのメソッドに渡します。これはvb6で書かれたCOMオブジェクトにとってはまったく問題ではありません。

.net appdomain境界を参照し、オブジェクトを直列化可能またはmarshalbyrefにしたい。 vb6に戻ったデータを変更するために.net部分が必要なので、シリアライズ可能ではありません。 Inherits MarshalByRefObjectにクラスをマークすると、「このリモートプロキシには、登録されたサーバーチャネルがリッスンしていないか、アプリケーションにサーバーと通信するための適切なクライアントチャネルがない」というチャネルシンクがありません。

チャンネルがありません - 同じdllのappdomainを経由しています。それは、NETはそれが行う必要がありますCOMとしてオブジェクトを扱っていないようです。

marshalbyrefとserializableの両方を削除すると、comオブジェクトがvb6でインスタンス化されている場合にのみ機能します。 appdomainの.net機能がオブジェクトを作成し、vb6に返されるように割り当てると、vb6は私に自動化エラーを与えます。

非常に醜いkludgeは、新しいappdomainのオブジェクトをシリアル化し、xmlを送り返し、vb6を逆シリアル化することですが、それはばかげているようです。

誰もが考えている?

ありがとうございます。

セス

答えて

0

あなたは、あなたの最初の.NETメソッドであなたのCOMクラスに適切なミューテータメソッドにデリゲートを作成するアプリケーションドメインの境界を越えてそのデリゲートを渡し、第二に、あなたのCOMオブジェクトを変異させることデリゲートを使用することができます。 NETメソッドを使用して、変換されたオブジェクトをVB6に戻します。 Marshal Classのメソッドが便利になるかもしれません。 :)

コメントを編集:最初の.net呼び出しでvb6クラスの.netコピーを作成し、その新しいオブジェクトを作成してからcomオブジェクトを修正する必要があるすべての.net呼び出しに渡しますバック。それはvb6の非直列化より簡単かもしれません。

+0

を有する< ====>ログインするが、別のアプリケーションドメイン内のコードは、プロパティの数十を変更しなければなりません新しいオブジェクトをコレクションに追加することができます。データを解析して、この結果をcomオブジェクトに取り込み、それをvb6に戻します。 私はちょうどそれがシリアル化を返すことに向かって傾いている... –

0

中間アセンブラファサードを作成する必要があります。その後、アプリケーションファサードにAppDomainを作成します。これは、dll vb6を持つアプリケーションのパイプラインの管理責任を果たします。

Vbを< ===>ファサード(のappDomain)少数の特性のために働くことになるDLLのVB6