是否有一种方法可以将0表示为F#中的void指针

问题描述 投票:0回答:1

在OpenGL中,通常,对gl.TexImage2D的调用需要void*作为最终数据参数。可以稍后传递数据,因此最后一个参数也可以设置为0。在F#中,我找不到将0强制转换为voidptr的干净方法。

以下内容对我有用,但是有更清洁的解决方案吗?

  let emptyData: array<byte> = [||]
  use emptyPtr = fixed emptyData
  let voidPtr = emptyPtr |> NativePtr.toVoidPtr
  gl.TexImage2D(
    GLEnum.Texture2D,
    0,
    int GLEnum.Red,
    atlasWidth,
    atlasHeight,
    0,
    GLEnum.Red,
    GLEnum.UnsignedByte,
    voidPtr
  )

f# interop
1个回答
0
投票

voidptr类型是System.Void*的别名,但是.NET编译器不希望我们直接使用此类型。因此,提供了IntPtr.ToPointer()可以将任何指针转换为空指针。根据您的情况,您想转换一个空指针(即0n),因此可以使用

IntPtr.Zero.ToPointer()

您也可以使用0n.ToPointer(),正如另一位评论者所指出的,Unchecked.defaultof<_>也可以使用,因为编译器可以在此处推断您的需求。 (IntPtr.Zero.ToPointer()是最易读的IMO)。

© www.soinside.com 2019 - 2024. All rights reserved.