gpt4 book ai didi

c# - 如何将 C 数组映射到 C#?

转载 作者:太空狗 更新时间:2023-10-29 21:29:37 25 4
gpt4 key购买 nike

我的问题与尝试从 C# 调用用 C 编写的函数有关。我查看了 C 库附带的头文件,以了解 C dll 中存在的函数。这是我看到的:

C 代码(用于名为“LocGetLocations”的函数):

typedef enum {
eLocNoError,
eLocInvalidCriteria,
eLocNoMatch,
eLocNoMoreLocations,
eLocConnectionError,
eLocContextError,
eLocMemoryError
} tLocGetStatus;

typedef void *tLocFindCtx;

typedef void *tLocation;

PREFIX unsigned int POSTFIX LocGetLocations
(
tLocFindCtx pCtx,
tLocation *pLoc,
unsigned int pNumLocations,
tLocGetStatus *pStatus
);

在 C# 中,我有这个:

[DllImport(@"VertexNative\Location.dll")]
public static extern uint LocGetLocations(IntPtr findContext, out byte[] locations, uint numberLocations, out int status);

问题是我不太清楚如何在 C# 中处理 pLoc 参数。我将它作为字节数组传递过来,尽管我不确定这是否正确。 C 库的文档说该参数是指向句柄数组的指针。

如何在 C# 端获取数组并访问其数据?

我在 C 中给出的示例如下所示:

tLocation lLocation[20];

// other stuff

LocGetLocations(lCtx, lLocation, 20, &lStatus)

如有任何帮助,我们将不胜感激!

最佳答案

通常,唯一重要的是参数的大小。我记得枚举是 C 中的整数,所以你可以简单地使用它。或者更好的是,在 C# 中重新创建相同的枚举,我认为它会起作用。需要记住的一件事是,在处理复杂的结构时,需要使用属性来告知框架所需的成员对齐方式。

关于c# - 如何将 C 数组映射到 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4389950/

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