[Delphi] コンポーネントを使用したらアドレス違反が...

コンポーネントを自身のプログラムに組み込んだら、アプリケーションの起動時または、追加したフォームの作成時に「アドレス違反が発生した。」ということはありませんか?こんな時、くろねこ製のコンポーネントだと、ふつうは真っ先にコンポーネントのバグを疑います。(またテスト漏れしてやがると、サポート掲示板にでも苦情を書き込んでやってください。)がしかし、ほかのプログラムでは正常に動いてるのに...
こんな時には、プロジェクトの設定を確認してください。プロジェクト|オプション|パッケージ の「実行時パッケージを使って構築」にチェックがついていませんか?このチェックが ON の場合には、パッケージ本体のファイルが必要になります。具体的にはアプリケーション実行時にパスの通ったディレクトリに、*.bpl ファイルが必要になります。

実行時パッケージを使って構築って?

実行時パッケージを使って構築を使うと DLL を使った時のように、重複するコードをプログラムの外に出すので EXE ファイルのサイズを小さくできます。実行時に BPL ファイルを読み込んでダイナミックにプログラムと結合してアプリケーションの動作に寄与します。このため実行時に参照できる状態にないと、アドレス違反が発生するのです。 小さいアプリケーションの場合には、実行時パッケージを使わない方がよいでしょう。EXE 一つで配布が完了するので、配布ファイルの管理が非常に楽になります。
ではいつ実行時パッケージを使った方がよいのでしょうか?それは、プログラムの配布サイズが企業ポリシーで制限されている場合や、頻繁に修正されるようなプログラムで修正される部分と修正されない部分を分けてしまう場合などがあります。大きなアプリケーションですと、サブシステム毎に分割を行うということもあるでしょう。
分割してしまうと、その実行時パッケージに修正を行った場合(機能拡張やバグ修正など)、にその実行時パッケージを配布すればよいので、配布するプログラムのサイズを大幅にカットできます。大企業やソフトハウスなどで遠隔地のパソコンに修正プログラムを配布しなければいけない場合には、時間の短縮にもなりますね。

コメント (0件)


くろねこ研究所
https://www.blackcat.xyz/article.php/ProgramingFAQ_del0053