我的问题与尝试从C#调用一个由C编写的函数有关。我查看了附带C库的头文件,以了解函数在C dll中的存在方式。以下是我看到的内容:
C代码(用于名为“LocGetLocations”的函数):
在C#中,我有以下代码:
问题是我不太知道怎样在 C# 中处理 pLoc 参数。我把它转换成了字节数组,但我不确定这样是否正确。C 库文档说明该参数是一个指向句柄数组的指针。如何在 C# 端获取一个数组并访问它的数据?C 语言中给出的示例代码如下:
任何帮助都将不胜感激!
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)
任何帮助都将不胜感激!
IntPtr
数组。 - Jim Mischel