0

別のアプリケーション(「A」と呼びましょう)のVC#を使用してUIフロントエンド(「B」と呼ばれる)を作成しました。BはスタンドアロンEXEであり、(何らかの理由で)Aから呼び出す必要があります(セキュリティポリシーのため、DLLは使用できません)。

現在の流れは次のとおりです。

  1. A(COMサーバーとして機能している)を起動します。
  2. system()呼び出しを使用してAにBを実行させます。
  3. BはAへのCOM接続を作成します。
  4. ユーザーがBを閉じます
  5. Aも閉まっています。<<<これが問題です!

必要なフローは次のとおりです。

...(5)Aは閉じていません。

私の知る限り、望ましくない動作の理由は、COM参照カウンターが自動的に減少するためだと思います。Bは既存のAインスタンスを使用しているため、カウンターは以前は1でしたが、0に減少し、Aが完全にシャットダウンします(ユーザーがその時点でAのデータを失う可能性があるため、これは実際の問題です)。

私はすでにAを存続させるためにGCに影響を与えようとしましたが、成功しませんでした。

質問は:

参照カウンターのデクリメントを回避するなどして、Aのシャットダウンを防ぐにはどうすればよいですか?

4

1 に答える 1

0

A の com オブジェクトにアクセスできる場合は、Marshal.AddRefを実行して参照カウンターをインクリメントできます。つまり、A が COM オブジェクトも使用していることを宣言できます。

于 2013-01-16T07:56:33.723 に答える