我有调用C dll的C#代码。 dll具有以下全局const字符串数组:
const char *PtxEditorColumnHeaders[] = {
"Ptx#",
"Primitive",
"PtxType",
"_END_COLUMNS"
};
我想要做的就是获取此文本并将其填充到ListView控件的Column文本中。 我发现有几种方法可以做到这一点,使用Pinvoke,strcpy等等。但是,既然我还在学习c#并且到目前为止我的方式没有破坏,那么最佳实践方法是什么?
答案 0 :(得分:-1)
编写一个C函数,返回指向数组第一个元素的指针,以及元素个数:
const char **GetPtxEditorColumnHeaders(int *count)
{
*count = 4;//or however you want to get hold of this information
return PtxEditorColumnHeaders;
}
然后声明p / invoke:
[DllImport(@"mydll.dll", CallingConvention=CallingConvention.Cdecl)]
static extern IntPtr GetPtxEditorColumnHeaders(out int count);
像这样调用函数:
int count;
IntPtr PtxEditorColumnHeaders = GetPtxEditorColumnHeaders(out count);
List<string> headers = new List<string>();
for (int i=0; i<count; i++)
{
IntPtr strPtr = Marshal.ReadIntPtr(PtxEditorColumnHeaders);
headers.Add(Marshal.PtrToStringAnsi(strPtr));
PtxEditorColumnHeaders += Marshal.SizeOf(typeof(IntPtr));
}
这些东西很快变得乏味,此时C ++ / CLI包装器开始变得更具吸引力。