我通过Interop调用一个方法,该方法返回一个out IntPtr
参数。如何获取这个IntPtr
的byte*
,以便我可以对其进行操作?我尝试了以下代码:
fixed(byte* ptr = (byte)myIntPtr)
但它没有起作用。任何帮助都将不胜感激!
我通过Interop调用一个方法,该方法返回一个out IntPtr
参数。如何获取这个IntPtr
的byte*
,以便我可以对其进行操作?我尝试了以下代码:
fixed(byte* ptr = (byte)myIntPtr)
但它没有起作用。任何帮助都将不胜感激!
您可以简单地编写:
byte* ptr = (byte*)int_ptr;
您不必使用fixed关键字。您不想固定IntPtr,是吗?
myIntPtr.ToPointer()
我不希望我的应用程序中出现“不安全代码”,因此我采取了以下措施将IntPtr转换为byte[]。给定一个名为“unsafeDataBlock”的IntPtr:
var byteArray = new byte[dataBlockSize];
System.Runtime.InteropServices.Marshal.Copy(unsafeDataBlock, byteArray, 0, dataBlockSize);
对我来说,这似乎有效。我没有使用Interop,但仍然从C#调用了一个托管的C++函数。然而,托管的C++函数调用了非托管代码,因此它实现了与Interop相同的功能。
无论如何,在从C#调用的C++函数中,我使用了以下代码:
(anyPointerType*) pointer = (anyPointertype*) myIntPtr.ToPointer();
System.Runtime.InteropServices.Marshal
中的方法,或者(更好的选择)声明你的互操作函数的参数类型,以便自动进行封送处理。