Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2579 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Accéder via VB à une fonction en C retournant une chaine de caracs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Accéder via VB à une fonction en C retournant une chaine de caracs

n°768515
guillot
Posté le 18-06-2004 à 11:16:07  profilanswer
 

Hello,
 
J'ai commencé à développer une DLL en C pour ensuite appeler les fonctions via VB.
 
Le problème est que lorsque je tente de retourner une chaine de caractères de ma fonction en C dans VB, ça me plante mon appli VB... :-/
 
Voilà ma fonction en C:
char* __stdcall RecupNomTable(int CodeOp)
{
 char* StrTmp;
 switch (CodeOp)
 {
  case 1:
   StrTmp = "Cisaillage"; break;
 }
 return StrTmp;
}

 
Voilà ma déclaration et mon appel en VB :
Private Declare Function RecupNomTable Lib "testdll7.dll" Alias "_RecupNomTable@4" (ByVal CodeOP As Integer) As String
et  
MsgBox RecupNomTable(1)
 
Merci pour vos réponses,


Message édité par guillot le 18-06-2004 à 11:17:59
mood
Publicité
Posté le 18-06-2004 à 11:16:07  profilanswer
 

n°768560
cricri_
Posté le 18-06-2004 à 11:34:38  profilanswer
 

vi, mais ta variable StrTmp est détruite au return là ...
Déclare là statique peut-être.

n°768630
guillot
Posté le 18-06-2004 à 11:55:37  profilanswer
 

Ca ne change rien.
De toute façon ça me renvoie la valeur de la variable et non la variable, et même si je met return "test";, ça me plante :
- Espace de pile insuffisant
- Mémoire insuffisante
- Ou plantage sévère qui quitte VB...

n°768680
cricri_
Posté le 18-06-2004 à 12:10:51  profilanswer
 


tu déclares comment ta chaine dans VB ? enfin au niveau proto ?
Il faut la déclarer : by Val pour en faire un pointeur sur une chaine

n°768804
guillot
Posté le 18-06-2004 à 13:00:27  profilanswer
 

Ben ma chaine je la déclare pas si j'utilise MsgBox
 
Ma déclaration de fonction me renvoie un "String" et moi je l'affecte à un String, le ByVal me sert seulement pour mon "Integer" que j'envoie (Je n'envoie pas de chaine en VB, seulement en C).

n°768966
cricri_
Posté le 18-06-2004 à 13:45:31  profilanswer
 

... Je viens de lire que ce n'est pas possible dans la doc de VB, sauf si la Dll a spécialement été écrite pour ^tre utilsée avec VB, mais là j'avoue ne pas savoir ce que cela veut dire ...

n°768983
guillot
Posté le 18-06-2004 à 14:00:39  profilanswer
 

Normalement c'est possible de renvoyer une chaine de caractères. Pas mal de monde a pu créer des DLL en C avec passages/renvois de chaines de caractères vers du VB.
 
On m'a parlé d'en-têtes unicodes ou ANSI à modifier dans mes sources en C. L'ennui c'est que je ne sais pas où ni comment faire ça  :??:

n°769023
cricri_
Posté le 18-06-2004 à 14:13:12  profilanswer
 

Ce n'est pas ce que dit la doc de VB ...
Sinon tu peux aussi la passer en argument à ta fonction, en la prototypant byVal, et là tu peux la modifier dans ta dll, ça devrait être modifié en VB aussi.

n°769045
guillot
Posté le 18-06-2004 à 14:19:47  profilanswer
 

Oui c'est vrai, mais l'ennui c'est que ça m'oblige à déclarer une variable en VB pour stocker la valeur de la chaine.
 
Mais je crois que je vais faire ainsi.
 
Merci pour tes réponses :)

n°769092
guillot
Posté le 18-06-2004 à 14:40:09  profilanswer
 

Même problème en passant ma chaine en paramètre...
 
Avec les nombres je peux faire ce sur je veux mais dès que je touche à une chaine de caractères ça déconne...  :(

mood
Publicité
Posté le 18-06-2004 à 14:40:09  profilanswer
 

n°769181
cricri_
Posté le 18-06-2004 à 15:35:41  profilanswer
 

Zarbi ça ... as-tu initialisé la chaine que tu passes en paramètre ?

n°769258
cricri_
Posté le 18-06-2004 à 16:09:34  profilanswer
 

j'ai trouvé ça si ça peut t'aider, pas regardé ...
http://sandsprite.com/CodeStuff/
Writing_A_C_Dll_for_VB.html

n°769833
guillot
Posté le 19-06-2004 à 12:36:53  profilanswer
 

J'ai regardé et apparemment il parle bien de types BSTR pourles chaines de caractères à la place des PTSTR (ou char*). Je testerais Lundi.
 
Merci :)

n°772472
guillot
Posté le 22-06-2004 à 11:18:02  profilanswer
 

Apparemment ça pose pas mal de pbs les passages de chains de caractères de C vers VB.
J'ai trouvé des solutions approximatives, mais qui fonctionnent pratiquement à 100%.
 
Je reviendrais faire un topo de ce que j'ai trouvé quand ça marchera.

n°772682
maestun
Posté le 22-06-2004 à 14:05:29  profilanswer
 

Un lien qui me semble pas mal du tout :
http://rp.developpez.com/vb/tutoriels/dll/
J'ai testé, ça marche bien :)

n°772874
guillot
Posté le 22-06-2004 à 15:52:57  profilanswer
 

maetun : j'avais déjà vu ce lien et c'est vrai que c'est bien expliqué.
 
Mais malheureusement y'a pas possibilité de renvoyer une chaine de caractères avec ses exemples...
 
Alors j'ai pu voir que je pouvais renvoyer une chaine de caractères, mais lorsque je la récupère dans VB, soit je récupère des caractères incorrects à la fin de ma chaine (meme si je l'initialise)soit j'utilise malloc et là ca pose un autre probleme c'est que je ne peux pas exécuter le free(maChaine) vu que ma dernière instruction est un "return maChaine"...
 
 
arg ! A mon avis y'a pas moyen.. Faut passer par référence pour que ça tourne !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Accéder via VB à une fonction en C retournant une chaine de caracs

 

Sujets relatifs
[réglé] fonction trigoLes blocs alloué par 1malloc sont ils libérés a la sortie d'1 fonction
[LISP] j arrive pas a tranformer un résultat en chaine de caractère[RESOLU]creer une fonction
[php] - Help avec fonction ereg() toujour et encore incompréhensibleremettre une chaine de caractere à vide???
pointeur de fonction membre d'une classeChercher une chaine dans un tableau PHP
[CSS] plusieur feuilles de styles en fonction d'un choixFonction non bloquante sous telnet
Plus de sujets relatifs à : [C] Accéder via VB à une fonction en C retournant une chaine de caracs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR