c# - C# 中的 void* 是什么?

标签 c# c++ visual-c++

<分区>

我正在查看 VC++ 6.00 程序的源代码。我需要将此源代码转换为 C#,但我无法理解此示例中的 (void*) 是什么?

glTexImage2D(
     GL_TEXTURE_2D,
     0,
     GL_RGBA8,
     IMAGE_WIDTH,
     IMAGE_HEIGHT,
     0,
     PIXEL_FORMAT,
     GL_UNSIGNED_BYTE,
     (void*)imageData
 );

在这段代码中imagedata是一个指针 byte* 图像数据

最佳答案

一般来说,void*在C#代码中会被转换为IntPtr

使用更多信息进行编辑:.NET/C# 中的 IntPtr 通常表现为不透明句柄。您不能直接取消引用它,从中获取“大小”信息(例如,您指向的数组的大小),并且它不会试图告诉您它指向的数据类型 - 或者即使它是根本没有指针。当您将 C/C++ 代码转换为 C# 并看到 void* 时,C# 代码应使用 IntPtr 编写,直到您更好地了解您正在处理的内容与。

pinvoke.net 站点有两个 glTexImage2D 条目,具体取决于图像数据的存储位置。如果图像数据存储在 .NET/C# 中的托管 byte[] 中,则调用传递 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);

关于c# - C# 中的 void* 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15527985/

相关文章:

部分模板实例化中的 C++ Typedef

visual-c++ - 用循环优化除以零 VC++ 2015

c++ - 触发 COM 事件时调用 Lock()/Unlock() 的目的是什么?

api - 如何学习 CATIA CAA V5 R18 c++ 中的流程

c# - HttpClient 中的 GetStringAsync 方法在 WP8 中抛出异常

c# - 如何将整个文件夹添加到 zip 存档

c++ - 使用 winsock 发送 POST 数据(并使用 PHP 服务器端脚本接收它们)

c# - 从 C# 使用 LibTiff(访问平铺的 TIFF 图像)

javascript - ASP MVC Controller 发布具有不同值的相同 html 输入名称

c++ - 运算符重载 C++ 建议