C#:调用 C++带有 char** 参数的 DLL
我想从我的 C# 代码中调用这个 C++ 函数:
void GetArrayOfNames(char** names, int nbOfNames);
要在 C++ 中调用它,我只需定义一个 char* 数组:
char* aNames[20];
并在循环中分配每个名称:
for(int i-0; i<20; i++)
{
aNames[i] = new char[50];
}
然后调用:
GetArrayOfNames(aNames, 20);
在我的C# 代码,我有:
[DllImport("MyDLL.dll")]
unsafe static extern void GetArrayOfNames(char** ppNames, int nbOfNames);
现在,我如何进行内存分配并调用 GetArrayOfNames?另外,有什么方法可以不必将我的函数声明为“不安全”?
I would like to call this C++ function from my C# code:
void GetArrayOfNames(char** names, int nbOfNames);
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];
}
Then call:
GetArrayOfNames(aNames, 20);
In my C# code, I have:
[DllImport("MyDLL.dll")]
unsafe static extern void GetArrayOfNames(char** ppNames, int nbOfNames);
Now, how do I do the memory allocation and call GetArrayOfNames? Also, any way of not having to declare my function as "unsafe"?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
大概:
Probably:
据我了解
char**
只是对字符串的引用。我为自己创建了一个小测试,效果很好:C++ 中函数的实现是:
As I understand
char**
is just a reference to string. I created a small test for myself and it worked fine:The implementation of function in C++ is:
这最终工作了:
static extern int GetArrayOfNames(IntPtr[] astr, int iLength);
并像这样调用/设置:
并放回字符串中:
This ended up working:
static extern int GetArrayOfNames(IntPtr[] astr, int iLength);
And called/setup like this:
And to put back in a string:
我可以帮你吗?我的 C++ 示例代码:
在 C# 中我调用:
抱歉我的英语。
Can i help you? my sample code in C++:
and in C# i call:
Sorry for my english.