cs_crostif
Messages postés5Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention26 mai 2004
-
20 nov. 2003 à 14:17
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 2021
-
21 nov. 2003 à 08:20
Bonjour,
j'ai eu une fonction à déclarer en publique pour y faire appel depuis d'autres formes (les uses sont correctement déclarée)
lors de la compilation j'ai ce message d'erreur (provenant de la déclaration de la fonction dans Public) :
"Déclaration de champ non authorisée après des méthodes ou propriétés"
J'ai recherché dans l'aide et n'ai pas compris grand chose au peu qui y est dit. Quelqu'un aurai-t'il la solution pour déclarer ma fonction ?
voici les codes :
public
{ Déclarations publiques }
Procedure LibB(Sender: TObject);
function VerifOB(base : string): boolean; external;
...
implementation
uses Unit1, Unit11, Unit3;
{$R *.dfm}
function VerifOB(base : string) : boolean;
var ini : TIniFile;
Fini : String;
ouverturebase : integer;
begin
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 20 nov. 2003 à 16:02
En attendant un avis plus "pointu", je crois que c'est la directive "external" qui provoque le message d'erreur.
Est-elle bien utile (il me semble qu'elle sert à appeller par exemple des dll) ?
De plus, tu déclares ta fonction (dans public, en l'occurence).
Il faudrait donc l'écrire dans l'implémentation en commençant par
FormX.function VerifOB(base : string) : boolean;
cs_crostif
Messages postés5Date d'inscriptionjeudi 26 décembre 2002StatutMembreDernière intervention26 mai 2004 20 nov. 2003 à 16:46
merci,
j'ai ajouté "external" par rapport à une doc sur Internet qui précisait de le mettre si on souhaitait rendre la fonction utilisable sur plusieurs forms.
si je l'enlève et que je mets "function Form2.VerifOB(base : string) : boolean;" dans l'implémentation (il ne veut pas de FormX.function VerifOB(base : string) : boolean;), l'erreur est alors :
Form2 redéclaré.
y a t'il un moyen sûr de déclarer une fonction afin qu'elle soit reconnue par les autres forms ?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 21 nov. 2003 à 00:32
Halte au feu !
Sur la première partie de la réponse de Japee, je suis entièrement d'accord.
Sur la deuxième, il manque un T devant Form2. C'est surement une erreur de frappe :-p
type
TForm2 = class(TForm)
//
public
function VerifOB(base : string): boolean;
end;
implementation
procedure TForm2.function VerifOB(base : string): boolean;
begin
//
end;
Ta function VerifOB devient alors une méthode puisque membre de la classe TForm2.
Quant à l'usage de la directive external, tu ne peux pas l'employer avec une méthode mais seulement avec une fonction ou procédure standard.
Ce qui se comprend fort bien. Car, sinon, l'appelant de la DLL n'a pas accès aux objets instanciés dans cette même DLL. Comment pourrait-il alors avoir accès à un membre de cette classe ?
"Déclaration de champ non autorisée après des méthodes ou propriétés"
Sais-tu que tu peux aussi sélectionner le message du compilateur dans la fenêtre des messages de Delphi et appuyer sur F1 ?
Tu obtiendras alors directement de l'aide en rapport avec ton problème.
Comme tu n'as extrait qu'une infime partie de ton code, nous nous réservons le droit de rester discret sur ce message du compilateur, faute d'éléments suffisants.
May Delphi be with you