Comment Jedicut appelle les fonctions contenues dans les dll ?

#1
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 ?

#4
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 ?
Jerome

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

#5
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 ?

#7
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 ?

#8
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 ?

#9
[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

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

cron