关于C#调用非托管C++dll传参问题(C#、C++高手进)
本人通过c++取得数据量比较大的数据,类型是char***三维数组,就相当于是c#中的datatable类型,现在希望将char的三维数组传给c#,并转换成datatab...
本人通过c++取得数据量比较大的数据,类型是char***三维数组,
就相当于是c#中的datatable类型,现在希望将char的三维数组传给c#,并转换成datatable使用。
请问各位大神,
1、c++的接口该如何做
2、c#又该如何接收
3、以及c#接收后如何转换成datatable
(PS:主要是考虑到性能问题,不能一个字段一个字段的拼接转换,太耗时,
问题解决了还会追加的悬赏,谢谢各位大神了。) 展开
就相当于是c#中的datatable类型,现在希望将char的三维数组传给c#,并转换成datatable使用。
请问各位大神,
1、c++的接口该如何做
2、c#又该如何接收
3、以及c#接收后如何转换成datatable
(PS:主要是考虑到性能问题,不能一个字段一个字段的拼接转换,太耗时,
问题解决了还会追加的悬赏,谢谢各位大神了。) 展开
2个回答
展开全部
如果C++的形参是char***三级指针的话,我建议你使用C#的string[][] str即二维数组来进行虚实结合。
比如,C++ API原型如下:
extern "C"{
_declspec(dllexport) void _demo(const char ***s){
// 此处省略...
}
}
则,在托管C#里调用(声明部分)就应该是:
[DllImport("你的动态链接库名称.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void _demo(string[][] s);
至于你所说的转换成DataTable,没见过有这样的调法。 不过我通常的做法是将C++ API原型的形参采用二级指针,形如char **,然后再托管C#里采用一维数组。
更多追问追答
追问
c++的参数必须用const么?我加const的话,在函数内部就无法赋值,不加的话c++侧都能取到值,但c#层接收的返回值s为空,代码在评论里。和你的代码唯一的区别就在const上,对c++不是很了解,这里const char ***要怎么赋值,直接赋值好像不允许,请赐教,谢谢。
追答
我上面的代码只是个demo,实际加不加是根据你具体的需要。
const char *** :是指向常量的指针 类型为char,指向的地址可以改变,但值不能改变。
你试下这样改:
void test(char ***re) {
*re=.....;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询