本文介绍了C#:使用char **参数调用C ++ DLL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从我的C#代码中调用此C ++函数:
I would like to call this C++ function from my C# code:
void GetArrayOfNames(char** names, int nbOfNames);
要在C ++中调用它,我只需定义一个char *数组:
To call it in C++, I just define an array of char*:
char* aNames[20];
并在循环中分配每个名称:
And allocate each name in a loop:
for(int i-0; i<20; i++)
{
aNames[i] = new char[50];
}
然后致电:
GetArrayOfNames(aNames, 20);
在我的C#代码中,我有:
In my C# code, I have:
[DllImport("MyDLL.dll")]
unsafe static extern void GetArrayOfNames(char** ppNames, int nbOfNames);
现在,如何进行内存分配并调用GetArrayOfNames?另外,有没有必要不必将我的函数声明为不安全"的方式?
Now, how do I do the memory allocation and call GetArrayOfNames? Also, any way of not having to declare my function as "unsafe"?
推荐答案
这最终成功了:
This ended up working:
static extern int GetArrayOfNames(IntPtr[] astr, int iLength);
然后这样调用/设置:
IntPtr[] intArr = new IntPtr[200];
for (int i = 0; i < intArr.Length; i++)
{
intArr[i] = Marshal.AllocHGlobal(256);
}
int nbOfNames = 2;
GetArrayOfNames(intArr, nbOfNames);
然后放回字符串中:
string tmp;
tmp = Marshal.PtrToStringAnsi(intArr[i]);
这篇关于C#:使用char **参数调用C ++ DLL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!