Я пишу пакет Delphi для RAD Studio XE7, в котором несколько классов могут рисовать графические элементы с помощью GDI +. Этот код работает хорошо, пока я использую его с проектами Delphi.
Однако мне также нужно создавать проекты C ++, которые используют тот же пакет. Я заметил, что все заголовки .hpp, для которых соответствующий модуль содержит некоторый код GDI +, должны быть вручную изменены для использования в C ++ после генерации компилятором, что очень раздражает. Как будто в GDI + для Delphi и для C ++ используется 2 совершенно разных кода, один из которых не имеет ничего общего с другим, и для которых объявления на одном языке не соответствуют на другом и наоборот. Так что простая функция Delphi, как
function GetGDIPlusPen: TGpPen; inline;
неправильно экспортируется в автоматически сгенерированном .hpp, потому что TGpPen в Delphi называется Gdiplus :: Pen в C ++, и для этого функция, представленная в моем .hpp, полностью несовместима и должна быть исправлена вручную — или прокомментирована для деактивации в худший случай.
Я знаю, что существует несколько директив компилятора, влияющих на генерацию содержимого файла .hpp, однако я никогда не находил такой директивы, которая запрещала бы генерирование данной функции в файле .hpp и заменяла его объявление другим, что компилятор c ++ может понять. Если кто-нибудь знает такие директивы, пожалуйста, дайте мне знать.
Я также взглянул на то, как другие люди решали эту проблему в нескольких библиотеках через Интернет. Похоже, что многие разработчики предпочитают писать свою собственную оболочку GDI + вместо использования стандартных модулей Winapi.Gdipapi и Winapi.Gdipobj, предоставленных студией RAD.
Итак, есть ли простой способ уведомить компилятор о создании правильного кода C ++ в автоматически сгенерированных файлах .hpp, в которых используется GDI +? Или единственное решение — написать свою собственную обертку вокруг GDI +? Как я могу использовать GDI +, чтобы не мешать генерации моих файлов .hpp?
С уважением
—————— ОБНОВИТЬ ———————
Я понимаю, что мой вопрос может быть немного неясным. На самом деле у меня есть несколько классов, которые содержат некоторый код 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);
...
Вопрос: есть ли способ сделать это?
С уважением
Задача ещё не решена.
Других решений пока нет …