記事カテゴリ

ユーザー機能


 2024年4月20日(土) 14:50 JST

[Delphi] CoInitializeが呼び出されていません

  • 投稿者:
  • 表示回数
    18,966

Delphi で Excel の機能を使う場合に、CreateOleObject など COM の機能を使って呼び出すのだが、この際に下記のメッセージが表示されることがある。

CoInitializeが呼び出されていません

GUI アプリケーションを作っている場合には、Forms ユニットあたりで CoInitialize が呼び出されているのだろうが、CUI アプリだと100% エラーが表示される。
このため、CUI アプリケーションでこのエラーメッセージを回避するには、CoInitialize を呼び出すなどの対策が必要になる。また、CoInitialize と対で CoUninitialize を呼び出さないといけない。
実際の対策は実に簡単で、

  1. uses に ActiveX を追加
  2. COM 機能を使用しているコードの前に CoInitialize を追加
  3. COM 機能を使用し終えたところで、 CoUninitialize を追加

COM を使うとその部分は、結構長くなることが多いと思うので、クラス化して、その Create と Destroy に それぞれ CoInitialize と CoUninitialize を追加するのがオススメである。

※複数回 COM 機能を使うときにも、全体を CoInitialize と CoUninitialize で囲むように追加すれば OK !

トラックバック

このエントリのトラックバックURL:
https://www.blackcat.xyz/trackback.php/ProgramingFAQ_del0060

以下のコメントは、その投稿者が所有するものでサイト管理者はコメントに関する責任を負いません。