我正在使用C#和.NET 2.0框架。IntPtr字符串和長?
我有這樣的方法在這裏得到一個字符串了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 \ t \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0X> 0 \ 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 \ 0 U \ t \ 0"
這被保存爲long
- 所以,我怎麼能得到這個IntPtr
到long
和不是string
?
可悲的是不是我想要的... =(我不知道爲什麼,你的解決方案似乎是正確 – Kovu 2010-07-15 10:21:10
我要回答問題:'我怎樣才能得到這個IntPtr長,而不是字符串' - 提取結果+偏移量9指向的長地址。那麼,你準確地要做什麼?我真的不知道'AMDeviceCopyValue_Int'返回的數據結構如何,所以在這方面我無法幫到你。你甚至使用正確的功能來提取「長」? – 2010-07-15 10:36:08
這是在Java中解決同樣的過程:http://stackoverflow.com/questions/3254602/convert-a-method-from-java-to-c-net 但不是我必須解決它或轉換此方法來c#.net – Kovu 2010-07-15 10:40:22