2010-12-11 62 views
2

J'ai une classe C++ que je suis en train de convertir à Delphi qui a une fonction membre varargs comme ceci:VarArgs méthode de classe erreur de conversion d'en-tête

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

J'ai essayé de le faire pour rendre équivalent du code Delphi afin que je puisse appeler de Delphes:

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

Mais quand je décompiler, il me donne l'erreur:

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

Qu'est-ce que Je fais mal?

Répondre

0

On ne sait pas ce que vous essayez de faire.

Si vous avez besoin analogique Delphi de code C++

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

il est

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

mais il n'est pas compatible binaire avec le code C++.

Si vous avez une DLL écrite en C++ qui exporte des classes C++, vous ne pouvez pas utiliser cette DLL directement dans Delphi.

3

Vous avez rencontré l'un des problèmes de Delphi. Les balises de description de méthode ne peuvent pas entrer dans n'importe quel ordre. Virtual doit venir avant abstract, et je ne suis pas sûr des deux autres.

En outre, Delphi ne vous permet pas de déclarer les méthodes varargs. La déclaration est valide uniquement pour l'importation de routines varargs à partir de DLL externes.

+0

Alors, il est impossible de traduire correctement une classe abstraite C++ avec une méthode varargs? –

+0

@John: Si vous cherchez une traduction exacte, oui. Mais jetez un œil aux 'format' de Delphi,' write' et 'writeln', qui peuvent remplacer' printf', et sans les failles de sécurité que 'varargs' a tendance à apporter à votre application. –

+0

Comme je l'ai dit, il s'agit d'une classe abstraite, donc j'écris des fonctions dans Delphi qui transmettront des pointeurs vers des classes C++ dérivées de la classe abstraite que je traduis. Je souhaite vraiment qu'il y avait un moyen de le faire :( –