Delphiや他の言語(主にC ++)で使用するDLLプラグインを作成したいと思います。C ++およびDelphiに適した方法でビットマップを渡すにはどうすればよいですか?Delphi TBitmapへのハンドルになりますか?C ++プログラムは、WinApiを使用してデコードできるはずですよね?
1 に答える
TBitmap
Delphiコードにのみ意味があるため、Delphiオブジェクトを渡すことはできません。渡す必要があるのはHBITMAP
、Windowsビットマップへのハンドルです。
DelphiTBitmap
クラスは、Windowsビットマップの単なるラッパーであり、HBITMAP
ハンドルを提供できます。注意する必要があるのは、それらのハンドルの所有権です。
Delphiをお持ちの場合は、のメソッドを呼び出すTBitmap
ことでを取得できます。によって返されるハンドルは、オブジェクトによって所有および管理されなくなりました。これはまさに必要なものです。そのハンドルをC++コードに渡し、それを所有者にします。そのハンドルを処分する責任があります。HBITMAP
ReleaseHandle
TBitmap
ReleaseHandle
TBitmap
のドキュメントは次のようにReleaseHandle
述べています。
TBitmapオブジェクトがハンドルを認識しないように、ハンドルをビットマップに返します。
ReleaseHandleを使用して、ビットマップとビットマップハンドルの関連付けを解除します。ビットマップハンドルの所有権を引き継ぐ(または破棄する)ルーチンまたはオブジェクトにビットマップハンドルを与える必要がある場合に使用します。
他の方向では、DelphiコードはHBITMAP
C ++コードからを受け取り、所有権を取得します。インスタンスのHandle
プロパティに割り当てることによってそれを行います。TBitmap
詳細は言語ごとに異なりますが、何があっても、すべてがに対処できHBITMAP
ます。