Ошибка преобразования заголовка метода класса Varargs - PullRequest
2 голосов
/ 11 декабря 2010

У меня есть класс C ++, который я конвертирую в Delphi, который имеет функцию-член varargs, например:

class ICInterface {
    virtual void printf(const char* fmt, ...) = 0;
};

Я пытался сделать это, чтобы создать эквивалентный код Delphi, чтобы я мог вызвать его из Delphi:

ICInterface = class
    procedure printf(fmt : PAnsiChar); varargs; cdecl; abstract; virtual;
end;

Но когда я компилирую, выдает ошибку:

[DCC Error] ICInterface.pas(9): E2169 Field definition not allowed after methods or properties

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2010

Вы столкнулись с одной из причуд Дельфи. Теги описания метода не могут идти в любом порядке. Virtual должен предшествовать abstract, и я не уверен насчет двух других.

Кроме того, Delphi не позволяет вам объявлять varargs методы. Объявление действительно только для импорта подпрограмм varargs из внешних библиотек DLL.

0 голосов
/ 11 декабря 2010

Неясно, что вы пытаетесь сделать.

Если вам нужен аналог Delphi кода C ++

class ICInterface {
    virtual void printf(const char* fmt, ...) = 0;
};

, то это

ICInterface = class
    procedure printf(fmt : PAnsiChar; const args: array of const); virtual; abstract; 
end;

, но этоне совместим двоично с кодом C ++.

Если у вас есть DLL, написанная на C ++, которая экспортирует классы C ++, вы не можете напрямую использовать эту DLL в Delphi.

...