gpt4 book ai didi

c# - 如何导入带有 int** 和 double** 参数的 C++ 函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:24 26 4
gpt4 key购买 nike

我正在尝试在我的 C# 代码中导入一个 C++ 函数。

这个函数定义为:

int SetPointers(int* ID, int* BufferID, int** Pointer, double** Time, int NumberOfPointers);

ID 是一个 int 数组,BufferId 一个 int 数组,指针一个int数组,计时 double 组,以及NumberOfPointers 一个 int。

我尝试使用 IntPtr 但没有成功。

这是我尝试过的最新代码:

[DllImport("open.dll", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
public unsafe static extern int SetPointers(int* ID, int* BufferID, ref IntPtr Pointer, ref IntPtr Time, int NumberOfPointers);
public unsafe int _SetPointers(int[] ID, int[] BufferID, ref int[] Pointer, ref double[] Time, int NumberOfPointers)
{
IntPtr fQueue = IntPtr.Zero;
IntPtr fTime = IntPtr.Zero;
int breturn = -1;
fixed (int* fId = ID)
fixed (int* fBufferID = BufferID)
fQueue = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)) * Pointer.Length);
fTime = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * Timestamp.Length);
breturn = SetPointers(fId, fBufferID, ref fQueue, ref fTime, NumberOfPointers);
return breturn;
}

我该怎么做?

最佳答案

首先,您可能希望使用 IntPtr 作为参数而不是 int[]。

在此之后,我还没有尝试过,但在指针上编码指针“ref IntPtr”或“out IntPtr”会起作用。

public unsafe int _SetPointers(IntPtr ID, IntPtr BufferID, ref IntPtr Pointer, ref IntPtr Time, int NumberOfPointers);

另请查看其他问题: How do I marshall a pointer to a pointer of an array of structures?

关于c# - 如何导入带有 int** 和 double** 参数的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20221747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com