C#:使用char **参数调用C ++ DLL [英] C#: calling C++ DLL with char** argument

查看:745
本文介绍了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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆