我正在使用RAD Studio XE7编写Delphi包,其中有几个类可能使用GDI +绘制图形元素。只要我将它与Delphi项目一起使用,这段代码就可以正常运行。
但是我还需要创建使用相同包的C ++项目。我注意到匹配单元包含一些GDI +代码的所有.hpp标头必须手动修改,以便在编译器生成之后在C ++中使用,这非常烦人。它好像用于Delphi和C ++的GDI +使用2个完全不同的代码,其中一个与另一个无关,并且一种语言中的声明在另一种语言中没有对应,反之亦然。所以简单的Delphi函数就像
一样function GetGDIPlusPen: TGpPen; inline;
在自动生成的.hpp中导出不正确,因为Delphi中的TGpPen在C ++中称为Gdiplus :: Pen,为此,我的.hpp中提供的函数完全不兼容,必须手动更正 - 或者注释为在最恶劣的情况下停用。
我知道有几个编译器指令可以影响the.hpp文件内容的生成,但是我从来没有找到过这样的指令来禁止在.hpp文件中生成给定的函数,并用另一个来替换他的声明。 c ++编译器可能会理解。如果有人知道这样的指示,请告诉我。
我还看了一下其他人如何在互联网上的几个库中解决这个问题,似乎许多开发人员更喜欢编写他们自己的GDI +包装器,而不是使用由Winapi.Gdipapi和Winapi.Gdipobj提供的默认单元。 RAD工作室。
那么,是否有一种简单的方法可以通知编译器在使用GDI +的自动生成的.hpp文件中生成正确的C ++代码?或者唯一的解决方案是围绕GDI +编写自己的包装器?如何使用GDI +不干扰我的.hpp文件的生成?
此致
------------------更新-------------------- < / p>
我意识到我的问题可能有点模糊。事实上,我有几个包含一些GDI +代码的类,有几个单元。当生成.hpp时,某些功能如例如
TWColor = record
...
function GetGDIPlusPen: TGpPen; inline;
...
在.hpp文件中以这种方式生成:
struct DECLSPEC_DRECORD TWColor
{
...
Winapi::Gdipobj::TGPSolidBrush* __fastcall GetGDIPlusSolidBrush(void);
...
当然这不起作用。所以我尝试做的是:
struct DECLSPEC_DRECORD TWColor
{
...
Gdiplus::SolidBrush* __fastcall GetGDIPlusSolidBrush(void);
...
问题是:有没有办法做到这一点?
此致