Appel d'API en VB.NET : Plantage

Résolu
cs_venka Messages postés 5 Date d'inscription lundi 13 octobre 2003 Statut Membre Dernière intervention 20 avril 2006 - 17 avril 2006 à 11:58
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

2 réponses

cs_Willi Messages postés 2375 Date d'inscription jeudi 12 juillet 2001 Statut Modérateur Dernière intervention 15 décembre 2018 22
17 avril 2006 à 12:25
Salut,
Tu peut remplacer cette fonction de l'api par simplement

Dim MesLecteurs as string()=System.IO.Directory.GetLogicalDriveStrings()
3
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
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
0
Rejoignez-nous