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

Signaler
Messages postés
5
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2006
-
Messages postés
5
Date d'inscription
lundi 13 octobre 2003
Statut
Membre
Dernière intervention
20 avril 2006
-
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

2 réponses

Messages postés
2375
Date d'inscription
jeudi 12 juillet 2001
Statut
Modérateur
Dernière intervention
15 décembre 2018
20
Salut,
Tu peut remplacer cette fonction de l'api par simplement

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

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

Codes Sources 151 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

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