2010-07-15 5 views
2

J'utilise C# et le framework .NET 2.0.IntPtr à String et long?

Je cette méthode ici pour obtenir une chaîne d'un IntPtr:

void* cfstring = __CFStringMakeConstantString(StringToCString(name)); 
     IntPtr result = AMDeviceCopyValue_Int(device, unknown, cfstring); 
     if (result != IntPtr.Zero) 
     { 
      byte length = Marshal.ReadByte(result, 8); 
      if (length > 0) 
      { 
       string s = Marshal.PtrToStringAnsi(new IntPtr(result.ToInt64() + 9L), length); 
       return s; 
      } 
     } 
     return String.Empty; 

Il fonctionne et toutes les données qui sont enregistrées sous forme de chaîne dans mon périphérique USB (retour des données de méthode AMDeviceCopyValue).

Maintenant, j'obtiens ceci:

£ \ rº \ 0 \ 0a \ t \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0x> Ë \ 0 \ 0 \ 0 \ 0Ũ \ t \ 0 \ 0 \ 0 € 1ÔxÕ͸MÔ \ 0 \ 0 \ 0 \ 0Ȩ \ t \ 0 \ 0 \ 0 \ 0 €) \ 0fŒ \ a \ 0Valeur \ 0 \ 0˨ \ t \ 0 \ 0 \ 0 € 7fŒ \ a \ 0Résultat \ 0Î \ t \ 0 \ 0 \ 0TÅfŒ \ a \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ f \ \ \ \ \ 0Port \ 0 \ 0 \ 0ô¨ \ t \ 0 \ 0 \ 0 €% fŒ \ a \ 0Clé \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \: \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0U \ t \ 0"

Ceci est enregistré en tant que long - donc, comment je peux obtenir ce IntPtr dans long et pas string?

Répondre

3

Si vous voulez simplement lire une longue au lieu d'une chaîne, utilisez:

long l = Marshal.ReadInt64(result, 9); 
return l; 
+0

Malheureusement pas ce que je veux ... = (Je ne sais pas pourquoi, votre solution semble juste – Kovu

+0

je répondais à la question: 'comment je peux obtenir ce IntPtr en long et pas string' - extrait le long à l'adresse étant pointée par le résultat + offset 9. Alors, que ** fait ** vous voulez exactement? Je ne sais vraiment pas quelle est la structure de données 'AMDeviceCopyValue_Int', donc je ne peux pas vous aider à cet égard. Utilisez-vous même la fonction correcte pour extraire 'long'? –

+0

c'est la même procédure qui est résolue en Java: http://stackoverflow.com/questions/3254602/convert-a-method-from-java-to-c-net Mais pas je dois le résoudre ou le convertir méthode à C# .net – Kovu