【问题标题】:What is void** in C#?C# 中的 void** 是什么?
【发布时间】:2023-04-04 21:41:01
【问题描述】:

我正在查看使用 C 编写的库的 C# 程序的源代码。我遇到了这一行,但不确定它是什么:

cvbimUNSAFE.GetImageVPA ((cvbim.IMG)cvImg.Image, 0, (void**)&lpImageBits, &pVPAT);

void ** 类型的对象是什么?我做了一些谷歌搜索,只能找到有关void* 的信息,如果我理解正确的话,它是一种指向所有顶级类型的指针。

【问题讨论】:

  • 我知道这有点晚了,但作为旁注:将参数声明为 void** 也相当于通过引用传递 void* 或作为输出参数 (@987654326 @) 这实际上是函数GetImageVPA 所做的(我碰巧知道这个库......)。所以在 GetImageVPA 的 DllImport 语句中,最安全的写法是 out IntPtrout void*(后者需要 unsafe 规范)。

标签: c# c pointers void


【解决方案1】:

在 C# 中,void** 是指向 void* 的指针。这是一个简单的例子:

   public unsafe static void Main(string[] args)
   {
        int x = 1;
        void* v = &x;

        //dereferencing v, it prints 1
        Console.WriteLine(*(int*)v);

        void** vtp = &v;
        //dereferencing vtp, it prints 1
        Console.WriteLine(*(int*)*vtp);

        Console.ReadLine();
    }

【讨论】:

    【解决方案2】:

    它是一个指向未指定对象的指针。基本上,只需将其视为指向原始内存指针的内存指针。

    所以,int** 是指向 int 的指针,而 void** 是指向指针的指针,但没有指定该指针指向什么。

    我做了一些谷歌搜索,只能找到有关 void* 的信息,如果我理解正确的话,它是一种指向一种 catch all 顶级类型的指针。

    不完全是。 void* 是一个指向某事物的指针,只是没有指定该事物是什么,而应被视为指向必须对其应用某种结构的原始内存块的指针。例如,malloc 返回一个 void*,因为它返回一个指向原始内存块的指针。

    【讨论】:

      【解决方案3】:

      这是一个空指针。详情请看这篇文章:

      http://msdn.microsoft.com/en-us/library/y31yhkeb%28VS.80%29.aspx

      您可以查看这个 SO question,了解如何在 C# 中实现它的详细信息:

      How to declare a void pointer in C#

      附带说明,如果不是,则该方法应标记为不安全。

      【讨论】:

        【解决方案4】:

        在 C 中,它表示指向 void* 对象的指针。换句话说,当你取消引用它时,你会得到一个void*

        我猜这是因为 lpImageBits 会在你正在调用的函数中被修改。

        【讨论】:

          【解决方案5】:

          在这种情况下,我猜这个库将分配保存图像所需的内存量,因此它需要双重间接,因此它可以更改lpImageBits 指向的地址。

          【讨论】:

            【解决方案6】:

            那不是 C#。它看起来像 C++。在这种情况下,void** 是指向 void 指针的指针。

            【讨论】:

            • 是c#使用了c dll
            猜你喜欢
            • 1970-01-01
            • 2012-03-11
            • 1970-01-01
            • 2010-11-05
            • 1970-01-01
            • 2021-04-03
            • 1970-01-01
            • 2015-01-26
            • 2014-02-20
            相关资源
            最近更新 更多