c# - DLLImport Int** - 如果可以的话如何做

标签 c# interop pinvoke dllimport

我正在尝试使用需要 int** 作为方法参数之一的第三方 DLL。它将参数描述为指向内存分配的指针的地址。

抱歉造成任何混淆。我认为该参数是双向的。 DLL 用于与 FPGA 板通信,方法是在主机 PC 和 PCI 板之间设置 DMA 传输。

最佳答案

使用引用 System.IntPtr .

 [DllImport("thirdparty.dll")]
 static extern long ThirdPartyFunction(ref IntPtr arg);

 long f(int[] array)
  { long retval = 0;
    int  size   = Marshal.SizeOf(typeof(int));
    var  ptr    = IntPtr.Zero;

    try 
     { ptr = Marshal.AllocHGlobal(size * array.Length);

       for (int i= 0; i < array.Length; ++i) 
        { IntPtr tmpPtr = new IntPtr(ptr.ToInt64() + (i * size));
          Marshal.StructureToPtr(array, tmpPtr, false);
        }

       retval = ThirdPartyFunction(ref ptr);
     }
    finally 
     { if (ptr != IntPtr.Zero) Marshal.FreeHGlobal(ptr);
     }

    return retval;
  }

关于c# - DLLImport Int** - 如果可以的话如何做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/209258/

相关文章:

c# - 如何在 C# 中使用 p/invoke 将指针传递给数组?

c# - 获取 Enum[] 的 int 值

c# - 如何从 Memory<byte> 中读取结构?

c# - 如何避免使用 async void 事件处理程序重入?

c# - PInvoke - 如何表示来自 COM 接口(interface)的字段

c# - PInvoke GetPackageId 失败并出现错误 122

c# - 如何用html代码替换gridview?

c++ - Java 和 C++ 密码学互操作性

C#/C++ 互操作 - 需要帮助定义我的数据结构

c# - 读取 Excel 单元格并设置行颜色