Varargs类方法头转换错误

时间:2010-12-11 05:03:04

标签: c++ delphi header variadic-functions

我有一个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 个答案:

答案 0 :(得分:3)

你遇到了Delphi的一个怪癖。方法描述标签不能以任何顺序进入。 Virtual必须在abstract之前到来,我不确定其他两个。

此外,Delphi不允许您声明varargs方法。该声明仅对从外部DLL导入varargs例程有效。

答案 1 :(得分:0)

目前还不清楚你想做什么。

如果你需要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 ++代码不是二进制兼容的。

如果你有一个用C ++编写的DLL导出C ++类,你不能直接在Delphi中使用这个DLL。