公開されているCOM機能を使用してアプリケーションを当社のアプリケーションにリンクしようとしている顧客/パートナーがいます。これまでのところ、ソフトウェアパッケージのインスタンスを表すCOMオブジェクトがあり、COMメソッドを使用して、アプリケーションで行ったことに基づいてユーザーのためにプログラムで何かを構築します。これは本質的に「エクスポート」機能です。
彼らが私にやるように頼んだのですが、私にはその方法がわかりません。それは、インスタンスがいつ閉じられるかをユーザーが決定できるようにすることです。これが意味するのは、ソフトウェアパッケージがロードされたときに、それが表示可能であり、ユーザーが操作できるということです。終了したら、右上の十字をクリックしてソフトウェアを終了します。COMオブジェクトはアプリケーションでまだ「アクティブ」であるため、これは機能しません。私たちのソフトウェアパッケージは、COMを介してそれをロードしたアプリケーションが開いたままである間にタスクマネージャーでプロセスを強制終了することによってのみ閉じることができます。アプリケーションが終了すると、アプリケーションは自動的に閉じます。COM呼び出しのために、アプリケーションが私たちのアプリケーションを「所有」しているように見えます。
私はC#で簡単なデモアプリを作成しMarshal.FinalReleaseComObject(myObject)
て、役に立たないようなものを使ってみました。
この種の目的でCOMを使用することは、実際には意図されたものではないことを認識していますが、何らかの回避策があるといいのですが。顧客/パートナーはVB.NETを使用していますが、C#で問題ありません。