Appel d'API en VB.NET : Plantage [Résolu]

Messages postés
5
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2006
- - Dernière réponse : cs_venka
Messages postés
5
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2006
- 18 avril 2006 à 00:25
Bonjour,

J'ai commencé à migrer un projet VB 6.0 sous VB.NET mais je suis rapidement tombé sur un os avec mes appels d'API.
En l'occurence, le problème se pose lorsque j'essaie d'appeler la fonction GetLogicalDriveStrings qui prend un paramètre String. La fonction est censée remplir la variable string mais VB.NET me renvoie une erreur disant qu'il y a eu tentative d'accès à un espace mémoire protégé. Je suppose donc que la variable de type string doit être déclarée et passée d'une façon différente à ce qui se faisait sous VB 6. Cet aspect est très mal documenté sur MSDN et je ne trouve pas la solution.

Le bout de code incriminé est le suivant :

Dim
lsBuffer
As
String
Dim llLength
As
Long
llLength = 256
lsBuffer = New
String(vbNullChar, llLength)

llReturn = GetLogicalDriveStrings(llLength, lsBuffer)

Si quelqu'un peut me dépanner ou m'aiguiller
Merci d'avance
Venka
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
2377
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
16
3
Merci
Salut,
Tu peut remplacer cette fonction de l'api par simplement

Dim MesLecteurs as string()=System.IO.Directory.GetLogicalDriveStrings()

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Messages postés
5
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2006
0
Merci
Mille Merci Willi,
C'est exactement ce qu'il me fallait. Sauf que le nom exact de la méthode est System.IO.Directory.GetLogicalDrives qui assure le même rôle que la fonction GetLogicalDriveStrings de l'API Windows (GetLogicalDriveStrings" n'est pas reconnu comme membre ou méthode de "System.IO.Directory).
Après j'ai galéré un peu pour essayer d'utiliser une autre API qui renvoyait le nom du volume (GetVolumeInformation) et puis finalement j'ai fini par trouver la classe
DriveInfo et sa méthode GetDrives() qui renvoie un tableau de structures avec toutes les infos détaillées de tous les lecteurs du système.
Comme quoi, en cherchant bien, on devrait trouver toutes les solutions de remplacement des fonctions de l'API Windows.
Encore merci.
Venka