Re: Comment Jedicut appelle les fonctions contenues dans les dll ?

#11
Salut Jerome,
Bon, je crois avoir trouvé une explication :P , dis moi si je me trompe :

Déjà, Getdescription ne renvoie aucune donnée, vu qu'il n'y a aucun type de retour défini dans sa déclaration. En fait si j'ai tout compris, cette fonction ne fait que modifier une variable déjà existante que Jedicut a créée juste avant l'appel de cette fonction. Et lors de l'appel, Jedicut n'envoie aucune information sur l'emplacement en mémoire (pointeur) de cette variable. Il n'envoie que le nom de la variable et sa longueur.

Pour les Dll faites avec delphi, aucun problème vu qu'elles "savent" retrouver l'adresse mémoire d'une variable, avec simplement le nom de celle-ci (c'est d'ailleurs un des gros avantage de Delphi si j'ai tout suivi). Le StrPLcopy copie donc bien la chaine de caractère là où il faut, c'est-à-dire dans la variable description qui a été envoyée en paramètre.

Mais, en l'absence d'un pointeur qui indique l'adresse mémoire où se trouve la variable, les dll écrites dans d'autres langages ne peuvent donc pas la retrouver , et encore moins la mettre à jour. On peut donc toujours attribuer une valeur à une variable description définie dans la dll (qui n'aura rien à voir avec celle qu'a envoyé jedicut), faire des strncpy divers et varié mais qui ne mettront pas à jour la bonne variable.

En fait , lors de l'appel de la fonction, Jedicut devrait envoyer en paramètre le pointeur vers le tableau qui contient son adresse mémoire, et non la variable elle même :

GetDescription(PChar(Description), SizeOf(Description));
..ou un truc du genre.

Et là effectivement, ce pointeur contenant l'adresse mémoire de la vairable description permettra (enfin devrait permettre) à une dll tierce de la retrouver et la mettre à jour convenablement.

C'est ça ou il faut que j'aille dormir :-D ?

Re: Comment Jedicut appelle les fonctions contenues dans les dll ?

#12
Disons que c'est presque ça d'après moi, sauf qu'il me semble que Jedicut travaille bien comme tu aimerais que ça travaille.

En déclarant un array of char, Delphi alloue la mémoire. Et quand Jedicut passe "Description" à une méthode qui attend un PChar, Delphi transmet bien un PChar, c'est à dire un pointeur sur caractère, à savoir l'adresse du premier caractère de mon "array of char".

L'erreur serait donc peut être que la mémoire n'est pas alloué avec simplement la déclaration. Si c'est ça il me suffirait de remplir "Description" avec n'importe quoi.

Je vais vérifier sur le net et je te tiens au courant. Et si c'est ça je t'enverrai une version de Jedicut modifié.

En attendant, ne te grille pas les neurones avec une simple description, y'a plus intéressant à faire pour découper des ailes :p

D'ailleurs aujourd'hui j'ai bossé sur ton plugin car j'aimerai améliorer la gestion de la vitesse lors d'une découpe. Je teste ça dès que j'ai un moment.
Jerome

Re: Comment Jedicut appelle les fonctions contenues dans les dll ?

#13
Bonsoir,
C'est sûr il n'y a rien qui urge : ]

En fait je me pose ces questions surtout en pensant aux développements à venir de Jedicut, c'est sûr que Delphi c'est bien, mais la version gratuites ne fonctionnent plus sous win7 (heureusement que j'ai un pc XP aussi qui m'a permis de sortir le plug-in) ...Donc il est bon de comprendre comment on peut faire pour qu'un plug-in puisse être écrit dans d'autre langage.
cron