如何将IntPtr转换为byte *

时间:2009-04-03 10:05:07

标签: c#

我正在通过interop调用一个返回out IntPtr参数的方法。如何为此byte*获取IntPtr,以便我可以对其进行操作?我尝试了以下方法:

fixed(byte* ptr = (byte)myIntPtr)

但它不起作用。任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:13)

您可以简单地写一下:

byte* ptr = (byte*)int_ptr;

您不必使用修复关键字。你不想固定IntPtr,是吗?

答案 1 :(得分:5)

myIntPtr.ToPointer()

答案 2 :(得分:1)

如果您不想在应用程序中使用不安全的代码,则必须使用System.Runtime.InteropServices.Marshal中的方法,或者(甚至更好)声明您的互操作函数的参数类型,以便自动编组。

答案 3 :(得分:1)

我不想在我的应用程序中使用“不安全的代码”,所以我做了以下操作将IntPtr转换为byte []。给定一个名为“unsafeDataBlock”的IntPtr:

var byteArray = new byte[dataBlockSize];
System.Runtime.InteropServices.Marshal.Copy(unsafeDataBlock, byteArray, 0, dataBlockSize);

答案 4 :(得分:1)

这似乎对我有用,我没有使用Interop,但仍在调用C Sharp的托管C ++函数。然而,托管C ++函数调用非托管代码,因此它完成了与Interop相同的功能。

无论如何,在从c-sharp调用的C ++函数中,我使用了这段代码:

(anyPointerType*) pointer = (anyPointertype*) myIntPtr.ToPointer();