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
?
Malheureusement pas ce que je veux ... = (Je ne sais pas pourquoi, votre solution semble juste – Kovu
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'? –
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