Page 1 sur 2

Comment Jedicut appelle les fonctions contenues dans les dll ?

Posté : jeu. avr. 05, 2012 2:46 pm
par Vincent
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 ?

Posté : sam. avr. 07, 2012 8:55 am
par Jerome
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 ?

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

Posté : sam. avr. 07, 2012 12:56 pm
par Vincent
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 ?

Posté : dim. avr. 08, 2012 8:52 am
par Jerome
C'est un super projet ça !

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

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

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

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

ça t'aide ?

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

Posté : lun. avr. 09, 2012 9:40 am
par Vincent
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 ?

Posté : lun. avr. 09, 2012 10:21 am
par Jerome
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 ?

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

Posté : lun. avr. 09, 2012 1:11 pm
par Vincent
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 ?

Posté : sam. avr. 14, 2012 9:17 am
par Jerome
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" ?

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

Posté : sam. avr. 14, 2012 3:07 pm
par Vincent
[quote=Jerome]
As tu essayé de faire un petit exécutable autonome en C pour tester la fonction GetDescription ?[/quote]
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.

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

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

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 :P

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

Posté : dim. avr. 15, 2012 8:27 am
par Jerome
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é...