Accueil > Forum > > > > Pb d'utilisation d'une DLL avec VB (allocation de memoire)
Pb d'utilisation d'une DLL avec VB (allocation de memoire)
lundi 14 mars 2005 à 10:37:27 |
Pb d'utilisation d'une DLL avec VB (allocation de memoire)

jeralex
|
Bonjour à tous,
Voila mon problème : je suis chargé d'ecrire une DLL en c permettant de recuperer les tag dans un fichier mp3. Quand j'appelle les fonctions dans Vb, vb plante mechant et le debug m'indique que le probleme vient de ma DLL. Voici une partie du code :
DLL :
La fonction general :
/* retourne le titre du fichier mp3 */ extern "C" char* WINAPI getTitre(char* nomfichier, int *nb) { char* retour; retour =(char*)malloc(sizeof(char*)); retour = '\0'; *nb=1; /* test de la version du tag*/ double vers = versionID3(nomfichier,0); if (vers == 1.1 || vers == 1) { getTitreV1(nomfichier,retour); }else { retour = getTitreV2(nomfichier,nb); } return retour; }
Les fonctions appelées :
/* retourne le titre du fichier mp3 pour la norme V1 */ void getTitreV1 (char* nomfichier, char* retour, int *nb) { lectureTag(3,30,retour,nomfichier,nb); }
Et celle qui plante : Cette fonction permet de positionner a la bonne place a lafin du fichier puis de lire x octets
void lectureTag (int debut, int longueur, char* retour, char* nomfichier,int *nb) { FILE *fic; char *tag; fic=fopen(nomfichier,"r"); if (fic == NULL) { exit(1); } int pos; pos=128-debut; fseek(fic,-pos,SEEK_END);
retour=(char *)realloc(retour,longueur*sizeof(char*)); fread(retour,sizeof(char),longueur,fic);
fclose(fic);
}
Le bout de code VB de test :
Public Declare Function getTitre Lib "idtagMP3.dll" (ByVal fich As String, ByRef nb As Long) As String
Public Sub main()
Dim fichier As String fichier = "c:\9.mp3" Dim res As String Dim nb As Long
res = getTitre(fichier, nb)
Debug.Print res Debug.Print nb
End Sub
Voila si quelqu'un pourrait m'aider a me dire pourquoi vb plante ca serait tres bien.
|
|
lundi 14 mars 2005 à 11:26:24 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

BruNews
|
On ne retourne jamais un pointeur char* à VB qui ne connait pas la notion de pointeur et est incapable d'accéder à la mémoire, tu dois lui générer un BSTR.
ciao... BruNews, MVP VC++
|
|
lundi 14 mars 2005 à 11:29:03 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

BruNews
|
ah oui autre chose valable pou le C aussi, ne jamais retourner à un processus externe le résultat d'un malloc, ce pointeur n'est valable QUE dans TON processus, l'adresse mémoire est invalide dans le processus recevant, me semble tout de même une évidence.
ciao... BruNews, MVP VC++
|
|
lundi 14 mars 2005 à 12:28:27 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

jeralex
|
ok je ne savais pas cela. Je suis d'accord pour le passage d'une chaine de caractere de VB vers la dll mais pour l'inverse je dois utilisé quelle type de variable.
extern "C" BSTR WINAPI getTitre(char* nomfichier, int *nb) { }
Je dois faire comme ca ??
|
|
lundi 14 mars 2005 à 12:49:33 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

BruNews
|
au plus simple, retourne direct SysAllocStringByteLen().
ciao... BruNews, MVP VC++
|
|
lundi 14 mars 2005 à 13:23:06 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

jeralex
|
C'est possible que tu me fasse un ptt exemple où une fonction renvoie une chaine de caractere que tu alloue dynamiquement car la je suis un peu perdu. Stp ??
|
|
lundi 14 mars 2005 à 14:43:49 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

BruNews
|
Pas illico je pars chez un client mais comme la question revient souvent j'en ferai ce soir une source détaillée avec les diverses possibilités.
ciao... BruNews, MVP VC++
|
|
lundi 14 mars 2005 à 14:51:14 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

jeralex
|
Je te remercie car la je suis coincé et mes connaissances quasi inexistante dans ce domaine ainsi que dans Vb dc je comprend pas les diverses exemple que j'ai trouvé sur le net. Je pense aussi que mon probleme pourrai venir de la declaration de ma DLL.
|
|
lundi 14 mars 2005 à 20:40:55 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)
|
jeudi 17 mars 2005 à 17:44:16 |
Re : Pb d'utilisation d'une DLL avec VB (allocation de memoire)

jeralex
|
C'est encore moi, j'ai encore un ptt soucis avec un realloc voila mon code :
ca c'est ma fonction generale BSTR __stdcall getTitre(BSTR *nomfichier) { char *valeur; valeur=(char*)malloc(sizeof(char*)*60); // obliger de faire ca car le realloc ne marche pas int taille; double vers = versionID3(nomfichier,0); if (vers == 1.1 || vers == 1) { taille = getTitreV1((char*)nomfichier,valeur);// fonction qui appelle la fonction contenant le realloc }
*nb = taille;
return SysAllocStringByteLen(valeur,taille); }
/* retourne le titre du fichier mp3 pour la norme V1 */ int getTitreV1 (char* nomfichier, char* retour) {
return lectureTag(3,30,retour,nomfichier); }
fonction contenant le realloc : /*Lecture d'un morceau de fichier*/ int lectureTag (int debut, int longueur, char *valeur, char* nomfichier) { FILE *fic; fic=fopen(nomfichier,"r"); if (fic == NULL) { exit(1); } int pos; pos=128-debut; fseek(fic,-pos,SEEK_END);
valeur=(char*)realloc(valeur,sizeof(char)*longueur);
fread(valeur,sizeof(char),longueur,fic);
fclose(fic);
return longueur; }
Dc mon probléme est que si j'initialise la chaine que je renvoie à un caractere dans la fonction getTitre et que je fais ensuite un realloc sur cette chaine, coté vb ca marche plus.
Bout de code vb :
Option Explicit
Declare Function versionID3 Lib "d:\Essai.dll" (ByVal s1 As String, nb As Integer) As Double Declare Function getTitre Lib "d:\Essai.dll" (ByVal s1 As String) As String Declare Function getArtiste Lib "d:\Essai.dll" (ByVal s1 As String) As String Declare Function getAlbum Lib "d:\Essai.dll" (ByVal s1 As String) As String Declare Function getAnnee Lib "d:\Essai.dll" (ByVal s1 As String, ByRef nb As Integer) As String Declare Function getCommentaire Lib "d:\Essai.dll" (ByVal s1 As String, ByRef nb As Integer) As String Declare Function getGenre Lib "d:\Essai.dll" (ByVal s1 As String, ByRef nb As Integer) As String
Sub Main() Dim s As String Dim nb As Integer Dim tag As Double s1 = "c:\9.mp3" s = getTitre(s1, nb) tag = versionID3(s1, 0) Debug.Print s Debug.Print tag End Sub
voila le resultat : ! windir=C:\WIND
Alors j'aimerai savoir pk mon realloc ne marche pas car il me semble bien l'utiliser.
Merci de me repondre.
|
|
Cette discussion est classée dans : dll, char, nb, retour, nomfichier
Répondre à ce message
Sujets en rapport avec ce message
C++ DLL retour de paramettre [ par PRZYBYLSKI ]
Bonjour,Je suis débutant en C++.J'essaye de trouver le moyen de faire une chose qui devrait être très simple.Avoir une application console qui envoi u
Convertir des strings [ par UnExPeCtEdSpy ]
Bonjour, Présentation du pb:Je ne suis plus trop familier du c++ mais j'ai du m'y remettre pour utiliser un bout de code en tant que DLL au service d'
HELP! DEV-C++ et Dll [ par couriousous ]
HEllo!Comment on crée une Dll que l'on peut inclure dans Visual Basic avec dev-c++??? au départ j'ai une fonction char * mafonction(char *) et je veux
Pb de variable (enfin je croi) [ par Xilofeon ]
Regardé ce code :#define PIDVALIDE "6.0.2800.1106"...<b
Fatal signal: Segmentation Fault (SDL Parachute Deployed) [ par broks ]
Je ne comprends vraiment pas pourkoa ca ne marche pas...C'est surement un probleme au niveau de la fonction saisi puisque je plante lorsque je dois sa
lire dans la base de registre [ par BsEtZeOpLhD ]
Salut.J'utilise VC++ et je suis sous Win XP.Voila, j'ai un problème pour lire une valeur de type REG_SZ dans la base de registre.J'utilise ce code :#i
ReadFile ou autre (une proposition ajouté la) [ par youpiyoyo ]
J'aurai besoin de récup ceci qui se trouve dans un .txtC:\Program Files\BSPlayer\bplay.exeje te met le .txt dans la piece jointesi possible le type de
concaténation........... [ par moloko2000 ]
Lorsque je concatène une chaine de caractère avec strcat par exemple: strcat(retour_search,temp );retour_search à la valeur suivante:????????????????
Dll et pointeur de fonction [ par dulac02 ]
salut à tousJ un gros pb avec des pointeurs de fonctions :Je charge une dll et plus particulièrement une fonction runcelle-ci reçoit commme argument u
passage de chaines de caractères en paramètre d'une DLL C vers VB [ par jopop ]
Salut tous les coders,soyons brefs, soyons concis.ma fonction :extern "C" void __stdcallMakeLineEx(const char* folder,char* file,char* sout); - folder
Livres en rapport
|
Derniers Blogs
[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE[RIA SERVICES] INCLUDE ET DOMAINDATASOURCE par Audrey
Dans un de mes articles précédents , j'avais parlé des DomainDataSource avec RIA Services dans le cas d'une interface Maître - Détail. Dans le même principe, je vais parler d'une autre manière de mettre en forme ce cas d'interface avec RIA Services. Et po...
Cliquez pour lire la suite de l'article par Audrey ZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATIONZUNE : VERSION ZUNE SOFTWARE V 4.2 ET LA SOCIALISATION par ROMELARD Fabrice
Une des nouveautés de la version V 3.0 était l'apparition de l'onglet Social qui ne fonctionnait que si le MarketPlace était activé sur son poste. Cela limitait donc son intérêt, car hors du cadre commercial USA-CANADA, peu de monde trouva...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice PRATIQUE DE SILVERLIGHT PAR ERIC AMBROSIPRATIQUE DE SILVERLIGHT PAR ERIC AMBROSI par MPOWARE
Je viens de finir la lecture du dernier livre d'
Eric Ambrosi
éditions PEARSON
Son livre donne une approche pratique de Silverlight qui sera aussi bien comprise par le développeur que par le designeur.
Tous les aspects du développement RIA sont abor...
Cliquez pour lire la suite de l'article par MPOWARE APPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NETAPPRENDRE à DéVELOPPER POUR LES MOBILES AVEC LA NOUVELLE GéNéRATION .NET par odewit
2 déclinaisons de Silverlight et 2 déclinaisons de Mono permettent dorénavant (ou permettront prochainement) de développer des applications .NET mobiles pour les principales plates-formes du marché :
Silverlight pour Symbian, basé sur Silverlight 2...
Cliquez pour lire la suite de l'article par odewit ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2ZUNE : NOUVELLE VERSION DU ZUNE SOFTWARE - V 4.2 par ROMELARD Fabrice
Avec la dernière génération du lecteur MP3 de Microsoft, le ZUNE HD, Microsoft a publié une nouvelle version du logiciel pour PC. Ainsi, je me suis décidé à installer celle-ci sur mon Tablet PC ACER, comme toujours le logiciel est donc tél...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : ESPEAK RE : ESPEAK par ghanim13
Cliquez pour lire la suite par ghanim13 RE : ESPEAK RE : ESPEAK par ghanim13
Cliquez pour lire la suite par ghanim13
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|