2010-12-11 14 views
2

私はこのような可変引数のメンバ関数を有するデルファイに変換午前C++クラスを有する:可変引数クラスメソッドヘッダ変換エラー

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

私ができるように、同等の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 

何午前私は間違っている?

答えて

0

あなたは何をしようとしているのか不明です。あなたがC++コードのDelphiのアナログを必要とする場合

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++で作成している場合は、このDLLをDelphiで直接使用することはできません。

3

あなたはデルファイの奇跡の1つを実行しました。メソッドの説明タグは、どのような順序でも使用できません。 Virtualabstractより前に来なければなりません。他の2つについてはわかりません。

また、varargsメソッドを宣言することはできません。この宣言は、外部DLLからルーチンvarargsをインポートする場合にのみ有効です。

+0

それで、varargsメソッドを使ってC++抽象クラスを正しく翻訳することは不可能ですか? –

+0

@John:正確な翻訳をお探しの場合は、はい。しかし、 'printf'を置き換えることができ、' varargs'があなたのアプリにもたらす可能性のあるセキュリティホールがなくても、Delphiの 'format'、' write'と 'writeln'を見てください。 –

+0

私が言ったように、これは抽象クラスなので、Delphiで、私が翻訳している抽象クラスから派生したC++クラスへのポインタを渡す関数を記述しています。私は本当にそれを行う方法があることを望む:( –