大規模なvb6アプリケーションがあり、変更/修正する必要があるため、フレームワーク2.0をターゲットにしてセクションを.netに移動しています。一連のクラスを .net dll に移動し、com に公開されるように適切にセットアップしました。
ここに問題があります: MainAppVB6.exe は DOTNET_COM.ComClass をインスタンス化します。これを別の .net dll のメソッドに渡し、appdomain を介して渡します。これは、vb6 で記述された COM オブジェクトではまったく問題になりません。
.net は appdomain の境界を認識し、オブジェクトをシリアライズ可能にするか、marshalbyref にする必要があります。vb6 に戻すデータを変更するには .net 部分が必要なので、シリアライズ可能は機能しません。Inherits MarshalByRefObject でクラスをマークすると、「このリモーティング プロキシにはチャネル シンクがありません。これは、サーバーに登録済みのサーバー チャネルがリッスンしていないか、アプリケーションにサーバーと通信するための適切なクライアント チャネルがないことを意味します」というメッセージが表示されます。
チャネルはありません。同じ dll 内の appdomain を通過しているだけです。.net はオブジェクトを COM として扱っていないようです。
marshalbyref と serializable の両方を削除すると、com オブジェクトが vb6 によってインスタンス化されている場合にのみ機能します。appdomain の .net 機能がオブジェクトを作成し、割り当てて vb6 に戻すと、vb6 で自動化エラーが発生します。
新しい appdomain でオブジェクトをシリアル化し、xml を送り返し、vb6 に逆シリアル化させるのは非常に厄介な方法ですが、それはばかげているように思えます。
誰にもアイデアはありますか?
ありがとうございました。
セス