Nói chung, void*
sẽ được chuyển đổi thành IntPtr
bằng mã C#.
Chỉnh sửa thêm một chút thông tin: IntPtr
trong .NET/C# thường hoạt động như một xử lý mờ. Bạn không thể trực tiếp dereference nó, có được "kích thước" thông tin từ nó (ví dụ như kích thước của một mảng bạn chỉ vào), và nó không cố gắng để cho bạn biết những gì loại dữ liệu nó chỉ - hoặc thậm chí nếu nó là một con trỏ ở tất cả. Khi bạn dịch mã C/C++ sang C# và bạn thấy void*
, mã C# phải được viết bằng IntPtr
cho đến khi bạn có ý tưởng tốt hơn chính xác bạn đang xử lý những gì.
Trang web pinvoke.net có hai mục nhập cho glTexImage2D
, tùy thuộc vào vị trí lưu trữ dữ liệu hình ảnh. Nếu dữ liệu hình ảnh được lưu trữ trong một số byte[]
được quản lý trong .NET/C#, bạn gọi phiên bản đã vượt qua byte[]
. Nếu dữ liệu hình ảnh được lưu trữ trong bộ nhớ không được quản lý và bạn chỉ có một số IntPtr
đến dữ liệu trong mã C#, bạn sẽ gọi phiên bản đó qua một số IntPtr
.
Ví dụ từ 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);
Nguồn
2013-03-20 15:36:58
'void *' có thể là bất kỳ thứ gì. Những gì nó nên được dịch như phụ thuộc vào ngữ cảnh - trong trường hợp của bạn có lẽ là 'byte []'. –