如何在C++和Delphi中将Bitmap传递给DLL函数?

Tom*_*Tom 4 delphi dll visual-c++

我想创建一个DLL插件,用于Delphi和其他语言(主要是C++).如何以C++和Delphi友好的方式传递位图?它可以只是Delphi TBitmap的一个句柄吗?C++程序应该能够使用WinApi解码它,对吧?

Dav*_*nan 9

您无法传递Delphi TBitmap对象,因为这仅对Delphi代码有意义.您需要传递的是HBITMAP一个Windows位图的句柄.

Delphi TBitmap类只是Windows位图的包装器,可以提供HBITMAP句柄.你需要注意的是这些手柄的所有权.

如果你有一个Delphi,TBitmap你可以HBITMAP通过调用a的ReleaseHandle方法来获得TBitmap.返回的句柄ReleaseHandle不再由TBitmap对象拥有和管理,这正是您想要的.您将该句柄传递给C++代码并让它成为所有者.它负责处理该手柄.

文档ReleaseHandle说:

返回位图的句柄,以便TBitmap对象不再知道句柄.

使用ReleaseHandle取消位图与位图句柄的关联.当您需要为将承担所有权(或销毁)位图句柄的例程或对象提供位图句柄时,请使用它.

在另一个方向,您的Delphi代码将从HBITMAPC++代码接收并获得所有权.通过分配实例的Handle属性来做到这一点TBitmap.

细节因语言而异,但无论如何,所有人都能够处理HBITMAP.

  • @Tom评论不可能! (2认同)