Comment declarer une fonction privé dans une dll delphi [Résolu]

jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 3 août 2006 à 19:40 - Dernière réponse : cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

17 réponses

Meilleure réponse
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 4 août 2006 à 15:13
3
Merci
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;

Merci cs_Loda 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_Loda
Meilleure réponse
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 4 août 2006 à 15:42
3
Merci
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.

Merci cs_Loda 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_Loda
Meilleure réponse
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 7 août 2006 à 12:45
3
Merci
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,

Merci cs_Loda 3

codes-sources a aidé 82 internautes ce mois-ci

Commenter la réponse de cs_Loda
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 3 août 2006 à 19:52
0
Merci
la mettre dans la partie implementation uniquement
Commenter la réponse de cs_Loda
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 3 août 2006 à 20:01
0
Merci
Mais je dis n'import quoi moi...
(faites comme si j'étais pas là)
Commenter la réponse de cs_Loda
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 3 août 2006 à 22:49
0
Merci
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.
Commenter la réponse de cs_Delphiprog
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 4 août 2006 à 00:50
0
Merci
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 ?
Commenter la réponse de DeltaFX
jinh68 215 Messages postés mardi 29 juillet 2003Date d'inscription 1 septembre 2006 Dernière intervention - 4 août 2006 à 09:28
0
Merci
D'accord avec Delta FX, sauf pour la convention d'appel stdcall.

j!nH
Commenter la réponse de jinh68
jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 4 août 2006 à 13:58
0
Merci
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............
Commenter la réponse de jayceblaster
jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 4 août 2006 à 15:24
0
Merci
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
Commenter la réponse de jayceblaster
DeltaFX 459 Messages postés lundi 19 avril 2004Date d'inscription 8 avril 2009 Dernière intervention - 4 août 2006 à 16:59
0
Merci
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.
Commenter la réponse de DeltaFX
jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 4 août 2006 à 19:37
0
Merci
 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
Commenter la réponse de jayceblaster
jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 6 août 2006 à 19:50
0
Merci
personne peut m'expliquer cette erreur????
Commenter la réponse de jayceblaster
jinh68 215 Messages postés mardi 29 juillet 2003Date d'inscription 1 septembre 2006 Dernière intervention - 6 août 2006 à 21:58
0
Merci
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
Commenter la réponse de jinh68
jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 6 août 2006 à 22:04
0
Merci
ben pourquoi quand je fais dans dans un projet VCL ca marche et la non ?
Commenter la réponse de jayceblaster
jayceblaster 12 Messages postés mercredi 31 mai 2006Date d'inscription 18 septembre 2006 Dernière intervention - 7 août 2006 à 13:38
0
Merci
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?
Commenter la réponse de jayceblaster
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 7 août 2006 à 14:21
0
Merci
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 !
Commenter la réponse de cs_Loda

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.