2009-07-09 1 views
1

イメージをコピーして特定のタスク用に開くサードパーティコンポーネントがありますが、ファイルハンドルを解放していないようです。C#で開いているFileHandlesを解放する

私はそのコンポーネントのドキュメントを読んだことがありますが、2004年のようにリリースされていますが、ハンドルを解放する方法はありますが、もちろんint(int bmpPtr)が必要です。 それは明らかにポインタです。 問題は:特定のファイルのオープンハンドルを取得する方法はありますか...誰かが知っている場合は、オープニングプロセスのアイデンティティーを知る方法がありますか?

そして、問題はC#ではなくC++です。私はDLLImportなしのソリューションをprefereするだろうが、私はそれが実行可能だとは思わない。 乾杯してください

答えて

1

コンポーネントの下からファイルハンドルを閉じることは、おそらく最良のアイデアではありません。私はC#から行うことができるのか分かりません。ただし、使用しているコンポーネントでDisposeメソッドを探す必要があります。通常、Disposeは、ファイルハンドルなどの管理されていないリソースをクリーンアップするために使用されます。

+0

また、 'using(){}'イディオムを考えると、例外の場合に神経を救うことができます。 – jdehaan

0

bmpPtrを必要とするメソッドがある場合は、bmpPtrを返すメソッドがあります。あなたがそれを呼び出した場所を見つけて、bmpPtrを保存して、後でそれを解放するために使用してください。

+0

まあまあ、それはしませんでした。 私は、特定の「CimgCopyCurrentRegion」を使用して、ドキュメントに従って「OLE_HANDLE」を返します。しかし、VSでは、それはintであると言います(それは値 '1'を返すのでポインタではありません)。 この同じ手順は、画像をコピーして永続化し、ハンドルを開いたままにします。今私はすべての方法を駆け抜けていますが、ハンドルを解放できるものはありませんでした。またはハンドルを取得します。一見古いコンポーネントなので、そのすべてを考慮に入れませんでした。とにかく私の場合は 、私は手動でハンドルを取得し、それを殺すしたいです。 –

1

これが当てはまるかどうかはわかりませんが、記録のためだけです:Image.FromFileでビットマップを読み込むと、イメージが破棄されるまでファイルが開かれます。

関連する問題