現在、HP の Quality Center へのコネクタ DLL を開発中です。サーバーに接続するために彼らの(説明文を挿入)COM APIを使用しています。Interop ラッパーは、VStudio によって自動的に作成されます。
私のソリューションには、DLL とテスター アプリケーションの 2 つのプロジェクトがあります。基本的には、DLL 内の関数を呼び出すボタンを含むフォームです。すべてがうまく機能します。欠陥を作成し、更新し、削除できます。メイン フォームを閉じると、アプリケーションが正常に停止します。
しかし、使用可能なすべてのプロジェクトのリストを返す関数を呼び出すと (コンボ ボックスに入力するため)、メイン フォームを閉じると、VStudio はソリューションを実行中として表示し、停止する必要があります。
コード内の単一の関数を特定することができました。これを呼び出すと、ソリューションは「ハング」したままになり、そうでない場合はうまく閉じます。これは、 (.Net ではなく、COM ライブラリの型)get_VisibleProjects
を返すTDC オブジェクトのプロパティへの呼び出しです。それを反復処理して、適切なリストを返します (後でコンボ ボックスを埋めるために使用します)。 List
:
public List<string> GetAvailableProjects()
{
List<string> projects = new List<string>();
foreach (string project in this.tdc.get_VisibleProjects(qcDomain))
{
projects.Add(project);
}
return projects;
}
私の仮定は、何かがメモリに保持されるということです。VStudio の外部で EXE を実行すると、EXE は終了しますが、メモリに何が残るかは誰にもわかりません。
私の質問は、このプロパティを呼び出して返されるものを取り除くにはどうすればよいですか? GCはこれを処理すべきではありませんか? ポインターを詳しく調べる必要がありますか?
私が試したこと:
- リストを変数に取得し、関数の最後で null に設定する
- クラスにデストラクタを追加し、
tdc
オブジェクトを null にする - テスター関数アプリケーションを最後までステップ実行すると、フォームが閉じて Main 関数が終了します。フォームは閉じますが、VStudio はまだ実行中であることを示しています。
ご協力ありがとうございます。