Я использую C # и .NET 2.0 framework.
У меня есть этот метод здесь, чтобы получить строку из 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;
Работает и все данные, которые сохраняются в виде строки на моем USB-устройстве (возвращают данные метода AMDeviceCopyValue
).
Теперь я получаю это:
£ \ rº \ 0 \ 0A \ т \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0x> Ф \ 0 \ 0 \ 0 \ 0A \ т \ 0 \ 0 \ 0 € 1ÔxÕ͸MÔ \ 0 \ 0 \ 0 \ 0E \ т \ 0 \ 0 \ 0 €) \ 0fŒ \ а \ 0Value \ 0 \ 0E \ т \ 0 \ 0 \ 0 € 7fŒ \ а \ 0Result \ 0i ¨ \ т \ 0 \ 0 \ 0TÅfŒ \ а \ 0 \ 0Key \ 0 \ 0 \ 0 \ 0n \ т \ 0 \ 0 \ 0 € + Foe \ а \ 0Port \ 0 \ 0 \ 0о \ т \ 0 \ 0 \ 0 €% Foe \ а \ 0Key \ 0 \ 0 \ 0 \ 0 ÷ ¨ \ т \ 0 \ 0 \ 0 €: \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0u \ т \ 0"
Это сохраняется как long
- так, как я могу получить это IntPtr
в long
а не string
?