Comment declarer une fonction privé dans une dll delphi

Résolu
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006 - 3 août 2006 à 19:40
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 7 août 2006 à 14:21
Bonjour,
je suis en train de créer un dll via l'expert de DLL delphi et je souhaite déclarer une fonction privé comme je peux le faire dans un projet VCL

   private maFonction():integer;

mais je n'y arrive pas comment dois je faire?

merci d'avance

17 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
4 août 2006 à 15:13
salut,

en fait tu confond la notion de privé/public pour une class (mot clès private) et pour une dll (ou une unité).

Comme te l'as dis DeltaFX, pour une dll si elle n'est pas exporté elle est "privée".

Ton problème est peut-être lié é l'ordre de déclaration. cad qu'une méthode n'est visible que depuis la ligne ou tu la déclare.

procedure A; // ne voit pas B
begin end;

Procedure B; // voit A
begin end;
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
4 août 2006 à 15:42
tu peut les "pré déclarer" en ne mettant que l'entête:

procedure B (aVar : TMonType);

procedure A; // A voit B !
begin end;

Procedure B (aVar : TMonType); // voit A
begin end;

Attention : aux appels en boucle/recursif !

PS: Click sur "réponse acceptée " si la réponse te convient.
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
7 août 2006 à 12:45
parce que la, tu n'es pas "dans" une class, mais dans une unité. Donc, ce n'est pas un "procedure of object" mais un "procedure" tout court.

Note que le nom de la procedure est "procedure imprimer()" et non "procedure TMaClass.Imprimer()"


pour contourner le problème, tu peux aussi crée une class qui ne contient que cette méthode, mais c'est moche.

le mieux, c'est de créer une méthode dans ta fiche (comme t'as dit j!nH) et depuis la, tu appel ce que tu veux. inclue ta procedure de dll ! ;)

bon code,
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
3 août 2006 à 19:52
la mettre dans la partie implementation uniquement
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
3 août 2006 à 20:01
Mais je dis n'import quoi moi...
(faites comme si j'étais pas là)
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 août 2006 à 22:49
Si tu as compris :
1- comment est structurée une unité Pascal
2- quelque chose à la Programmation Orientée Objet

Tu dois donc savoir que le mot "private" désigne la portée des membres (propriétés et méthodes) d'une classe et non d'une simple fonction.

Comme te l'as indiqué loda, il suffit donc de déclarer ta fonction dans la partie implémentation en retirant la directive private.

Si tu en es encore à ce stade, mets de côté la programmation des DLL et révise les bases du langage avant tout. Ce sera un investissement payant si tu souhaites continuer et voir tes projets aboutir un jour.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
4 août 2006 à 00:50
Je ne vois pas l'interet d'une fonction "private" dans une DLL. Soit elle est exportée, soit elle est interne (pas de stdcall; et pas listée dans exports), et donc "private" de facto.

Ou alors j'ai pas capté qqchose ?
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
4 août 2006 à 09:28
D'accord avec Delta FX, sauf pour la convention d'appel stdcall.

j!nH
0
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006
4 août 2006 à 13:58
Alors y a du monde la et j'ai grave l'impression de me faire tailler mdr.... Alors premièrement il est vrai que c'est peut etre pas judicieux de commencer par une DLL mais dans la vie on ne fait pas toujours comme bon nous semble (je suis obligé de faire une DLL --> I m sorry). Et puis désolé la prog n'est pas mon domaine et tout le monde n'a pas la chance d'avoir des années de codes dans les pattes ou d'etre sortie d'une grande école d'info.... Il me semble pourtant avoir posté sur le forum des débutants.

Et j'ai tres bien capté cette notion de privé et public je sais bien que si la fonction n'est pas définie dans les exports elle est automatiquement privé. Et en fait je souhaite déclarer une fonction privé qui puisse etre accessible par les autres fonctions de ma DLL (qu'elles soient public ou privé)

Bonne journée............
0
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006
4 août 2006 à 15:24
Ah merci Loda tu viens de m'apprendre un truc que je ne savais pas.

Je sais que pour une dll si elle n'est pas exporté elle est "privée". En revanche je ne savais pas que: qu'une méthode n'est visible que depuis la ligne ou tu la déclare.
 Ca parait evident maintenant que tu me le dit mais je ne le savais pas mais normal je suis chez les débutants (même si ca a l'air de déranger mdr)

En tout cas encore merci pour l'info LODA
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
4 août 2006 à 16:59
Mais y a pas de honte à attaquer direct par une dll, surtoutquandon débute. J'ai fait strictement pareil d'ailleurs, jadis  : avoir les yeux plus gros que les neurones coders. Et une fois que j'ai eu une belle dll qui marche, ben je me suis rendu compte que ca me pompait l'air, et j'ai dégagé la dll du projet.

De toute façon, les histoires de dll, ca fait chier, il en manque toutjours une à zindows qqpart, c'est abstru et abscon tant que t'as pas essayé d'en faire une. Apres on est tout de suite détendu, zen, on se rend compte qu'on aime ca, et tres vite on oublie le Tmediaplayer pour utiliser Bass.dll.

Keep On Coding.
0
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006
4 août 2006 à 19:37
 merci DeltaFX

En fait j'ai encore un ptit soucis.
Dans cette DLL je crée une form dynamiquement (avec un webBrowser) sur laquelle je crée un bouton. En fait je tiens a associer une fonction privé d'impression à l'événement OnClick de mon bouton.

procedure Imprimer(Sender: TObject);
 var
     vaIn, vaOut: OleVariant;
 begin
     WebBrowser_Affichage.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut);
 end;

 ............dans une autre fonction de la DLL j'ai:
  //définition de l'événement OnClick du bouton
  Button_Imprimer.OnClick := Imprimer;

Mais j'ai une erreur de compilation au niveau de la derniere ligne et je ne comprend pas pourquoi
0
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006
6 août 2006 à 19:50
personne peut m'expliquer cette erreur????
0
jinh68 Messages postés 215 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 1 septembre 2006
6 août 2006 à 21:58
Salut,

Il y'a effectivement un problème de typage. En effet la procédure que tu dois associer à ton OnClick doit être de type TEvent,  qui est équivalent à procedure of object(une méthode en gros).


Donc tu dois déclarer ta fonction imprimer comme étant une méthode de ta fiche.

j!nH
0
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006
6 août 2006 à 22:04
ben pourquoi quand je fais dans dans un projet VCL ca marche et la non ?
0
jayceblaster Messages postés 12 Date d'inscription mercredi 31 mai 2006 Statut Membre Dernière intervention 18 septembre 2006
7 août 2006 à 13:38
ok c'est bon j'ai compris (enfin je pense ), enfin maintenant ca marche
En fait moi j'ai créé ma form et mon tWebBrowser dynamiquement pour ne pas a avoir a inclure dans ma DLL une fiche. Parce que si je rajoute une fiche (donc une form) autant placer les composants de la forme en utilisant la palette d'outils non?
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
7 août 2006 à 14:21
stp, clique sur "réponse accepté" pour les réponses qui t'on aidées.

(j'ai pas bien compris ton histoire de dll et de form, mais c'est ps grave)

et, oui: C'est plus facile de poser des composant avec l'EDI que par code. :)

bon code !
0