Page d'accueil de Aeropassion
Partenaires du site :
Envoyé par Vincent 
Comment Jedicut appelle les fonctions contenues dans les dll ?
jeudi 5 avril 2012 14:46
Salut,
J'essaie de développer actuellement un plug-in en C ++.

Malheureusement, impossible de faire fonctionner la fonction GetDescription !

Après pas mal de test avec des exemples de renvoie de chaine de caractères trouvé ça et là, rien à faire...Soit Jedicut affiche "A small description of the plug-in...", soit ça plante complétement (obligé de fermer Jedicut par le gestionnaire des tâches), soit jedicut ne démarrer même plus et un message "Jedicut à cesser de fonctionner..." (sous win7) apparait.

J'aurais donc besoin de savoir précisément ce qu'envoie Jedicut à l'appel de cette fonction :

-Que contient la variable "cible" ? est-ce une valeur de la description par défaut qui est mise à jour via le StrPLcopy par la variable "description" ?

-Quelle est la valeur de "Taillecible" qui, si j'ai tout compris, doit réserver assez d'espace de caractère pour contenir la chaine entière qu'on va renvoyer ?
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
samedi 7 avril 2012 08:55
Bonjour Vincent,

J'ai fait exprès de revoir le code de cette méthode pour qu'il soit compatible avec plusieurs langages. Je n'ai pas le code sous les yeux donc pour l'instant je ne peux pas répondre. J'essaie de regarder ce week end.

Tu fais un plugin pour quel type de carte si ce n'est pas indiscret ?

Jerome
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
samedi 7 avril 2012 12:56
Salut,
Je travaille (enfin, c'est beaucoup dire :p) sur une éventuelle version de la mm2001 qui fonctionnerait sur port série...En effet je n'ai trouvé aucune solution avec les adaptateurs USB/parallèle qui ne peuvent apparemment servir qu'à imprimer (et encore, plus pour très longtemps)

Donc j'essaie de sortir un plug-in qui utilise ce type de port.
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
dimanche 8 avril 2012 08:52
C'est un super projet ça !

Dans Jedicut, cette méthode est déclaré comme ça :
GetDescription : procedure(Cible : PChar; tailleCible: integer);

"Description" est déclarée ainsi :
Description : array [0..128] of char;

Et la méthode est appellée de cette façon :
GetDescription(Description, SizeOf(Description));

Je n'ai utilisé que des formats de données compatible avec n'importe quel langage.

ça t'aide ?

Jerome
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
lundi 9 avril 2012 09:40
Salut,
Disons que c'est un peu plus clair, mais malgré quelques menus changements, ça ne fonctionne toujours pas :-(

J'ai un soucis avec la longueur de la chaine, il faut déjà que je mette absolument un nombre entier dans le strncpy (équivalent en C++ du strPLcopy de delphi), car si j'utilise la valeur taillecible que passe Jedicut ou un strlen, ça plante en me disant que le buffer est trop petit...Malheureusement, avec un entier, certe Jedicut ne plante plus, mais j'obtiens "A small description...", et non ce que j'ai mis dans la variable Description.

Question : lorsque Jedicut indique "A small description...", est-ce parce que la méthode dans le plug-in fonctionne mais renvoie une valeur fausse ou inadapté ? ou ne renvoie rien ?
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
lundi 9 avril 2012 10:21
Salut,

Je ne comprends pas la question. Ce que Jedicut renvoie, c'est ce que la dll lui donne. Tu peux me montrer le code de la méthode GetDescription dans ton plugin ?

Jerome
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
lundi 9 avril 2012 13:11
Voici ma fonction GetDescription en C++ :

void GetDescription(char *cible, int taillecible)
{
char *description = "fhfdghdhgd";

/* strncpy(cible,description,taillecible); */

strncpy(cible,description,11);
}

Avec le premier strncpy, jedicut ne démarre pas : "Jedicut a cesser de fonctionner.."
Avec le 2e, en fixant la taille du tableau à 11 (les 10 caractères de "description" + le caractère terminal), Jedicut démarre sans soucis mais affiche "A small description.." dans la description du plug-in . Donc soit la valeur renvoyée n'est pas d'un bon format, ou n'est pas valable, donc Jedicut utilise une valeur par défaut, soit ma méthode ne renvoie rien du tout...Comment savoir ?

En bricolant un peu avec des variations de strncpy plus modernes (strncpy_s par exemple), ou rajouter un strlen(description) pour être sûr que le tableau soit assez grand, j'obtiens un message d'erreur "buffer too small", ce qui signifie que taillecible serait trop faible pour acceuillir tous les caractères de Description...

bref c'est sûrement un truc très con, mais je bloque ...c'est mes débuts en C++ :-P

Autre détail, que je déclare ou non la fonction Getdescription au début du code ne change absolument rien. De toute façon la fonction GetDllFamily n'est pas déclarée non plus, mais semble fonctionner car mon dll apparait bien dans la liste des plug-in de comm.
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
samedi 14 avril 2012 09:17
C'est normal que ton premier appel à strncopy plante. Tu demandes à cette fonction de copier une chaîne decaractère qui va au delà de la taille qu'elle fait réellement.

As tu essayé de faire un petit exécutable autonome en C pour tester la fonction GetDescription ?

Ce qui m'intrigue, c'est que tu dis voir "A small description..." alors que dans ton code c'est marqué "fhfdghdhgd" ?

Jerome
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
samedi 14 avril 2012 15:07
Citation
Jerome
As tu essayé de faire un petit exécutable autonome en C pour tester la fonction GetDescription ?
Non, mais je vais y être obligé, pour déjà être sûr que la fonction renvoie bien un truc. Mais je suis sûr que ça va fonctionner sans soucis avec un exe simple. En fait je me trouve devant le même soucis qu'à l'époque où je voulais développer mon plug-in win7 en VB, mais là aussi je ne suis pas parvenu à renvoyer à Jedicut la description, alors qu'avec un petit exe de test écrit en VB ça fonctionnait sans soucis.

Citation

Ce qui m'intrigue, c'est que tu dis voir "A small description..." alors que dans ton code c'est marqué "fhfdghdhgd" ?

Bah voilà tout le soucis est là...A priori vu la simplicité de cette fonction, ça ne peut que fonctionner, mais...bah non tongue sticking out smiley

Ou alors après, c'est une histoire entre les pointeurs Delphi et les pointeurs C++ qui ne seraient pas gérés de la même façon ...

Je vais fouiner, on verra bien tongue sticking out smiley
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
dimanche 15 avril 2012 08:27
Ton essai en VB, tu l'avais fait avant ou après que je change la structure des dll et les types de données passées en paramètre ?

quand j'ai implémenté la nouvelle fonction GetDescription, j'avais fait des recherches pour que n'importe quel langage puisse être utilisé...

Jerome
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
mercredi 18 avril 2012 19:10
Salut Jerome,
Bon, je crois avoir trouvé une explication tongue sticking out smiley , 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 ?
mercredi 18 avril 2012 22:25
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 ?
vendredi 20 avril 2012 21:37
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.
Re: Comment Jedicut appelle les fonctions contenues dans les dll ?
lundi 23 avril 2012 19:04
Salut !

La version perso de delphi 7 fonctionne très bien sous windows 7. Il suffit de l'installer puis de le lancer avec un clic droit sur l'icône et en cliquant sur "démarrer en tant qu'administrateur".

Je code sous Xp et 7, et pas de soucis winking smiley

Jerome
Désolé, seuls les utilisateurs connectés peuvent envoyer des messages dans ce forum.

Cliquer ici pour se connecter



Et vous, vous venez d'où ?

Aeropassion

Paris en photo | Design by Le Flaketou, création de site internet

Phorum