通常,void*
将转换为IntPtr
C# 代码。
编辑更多信息:IntPtr
在 .NET/C# 中通常表现得像一个不透明的句柄。您不能直接取消引用它,从中获取“大小”信息(例如,您指向的数组的大小),并且它不会尝试告诉您它指向的数据类型 - 或者即使它是指针。当您将 C/C++ 代码转换为 C# 时,您会看到void*
,应该使用 C# 代码编写,IntPtr
直到您更好地了解您正在处理的内容。
pinvoke.net 站点有两个条目glTexImage2D
,具体取决于图像数据的存储位置。如果图像数据存储在byte[]
.NET/C# 中的托管版本中,则调用通过byte[]
. 如果图像数据存储在非托管内存中,并且您只有IntPtr
C# 代码中的数据,则调用传递IntPtr
.
来自pinvoke.net opengl32的示例:
[DllImport(LIBRARY_OPENGL)] protected static extern void glTexImage2D (
uint target,
int level,
int internalformat,
int width,
int height,
int border,
uint format,
uint type,
byte[] pixels);
[DllImport(LIBRARY_OPENGL)] protected static extern void glTexImage2D (
uint target,
int level,
int internalformat,
int width,
int height,
int border,
uint format,
uint type,
IntPtr pixels);