2009-12-23 4 views
1

Je dois mettre à niveau une ancienne application VB6 vers VB.NET; cette application utilise un appel de fonction à partir d'un .dll qui prend une adresse mémoire comme l'un de ses paramètres. L'application VB6 fait cela avec la fonction VarPtr(), mais cette fonction n'existe pas dans .NET. Comment puis-je récupérer l'emplacement de la mémoire d'une variable dans .NET?Comment procéder pour accéder aux adresses de variables dans VB.NET

-Edit1

Par exemple

aVariable1 = aFunctionCall(VarPtr(aVariable2)) 

-Edit2

L'appel de la fonction exacte est dans une DLL appelée FTD2XX.DLL et l'appel est exact

FT_STATUS = FT_ListDevices(arg1, arg2, _ 
    FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER) 
+0

Quel est le type des variables arg1 et arg2? – MarkJ

Répondre

1

Essayer passer des adresses de quelque chose dans le code managé (.NET) à une DLL non managée peut ne pas être le meilleur p lan. VB6 et VB.NET n'ont pas beaucoup en commun au-delà de la même syntaxe et d'un nom similaire. Vous devrez peut-être épingler la mémoire avant de passer une adresse. Vous devrez rechercher dans l'invocation de la plate-forme: http://msdn.microsoft.com/en-us/library/aa288468(VS.71).aspx

1

Il est automatique lorsque vous déclarez la fonction externe avec le mot-clé Declare. Tout ce que vous avez à faire est de déclarer l'argument avec ByRef. Cela force le marshaller P/Invoke à passer un pointeur vers le code natif. Même chose que VarPtr. Seulement si vous passez ByVal devez-vous convertir explicitement l'argument passé en un pointeur.

Questions connexes