c# 中如何调用vc 的dll里函数输出参数是char**类型的导出函数?
如:vc 里函数原型为int func_a(out char ** a,out char **b);
int func_b(in char * a,in char * b);
我在C#里先调用func_a,获取a,b,然后将a,b作为输入参数调用func_b,请教如何调用?
--------------------编程问答-------------------- intptr[]类型吧,然后Marshal.PtrToStringAuto转字符串看看 --------------------编程问答-------------------- 请帮忙说得再详细点 --------------------编程问答-------------------- 试试这样,可能可以
int func_a(out string a,out string b);
int func_b(string a, string b); --------------------编程问答-------------------- [dllimport("xxx.dll")]
private static extern int func_a(IntPtr[] a,IntPtr[] b);
然后
string s=Marshal.PtrToStringAuto(a[0]);
这样吧。 --------------------编程问答-------------------- 推荐用共享内存,只不过存和取要分别控制 --------------------编程问答-------------------- 使用unsafe代码段 --------------------编程问答-------------------- 1.类型对照
C语言类型(非托管) .NET类型(托管)
void* System.IntPtr
char System.Char
char* System.String
2.指针
* 指针
** 指针的指针 二级指针
3.参数修饰符
C C#
in 输入 默认
out 输出 out
inout 输入输出 ref
不知道你返回值的含义,代码大概思路应该是这样的:
[DllImportAttribute("你的VC类库.dll")]
public static extern int func_a(out string[] a,out string[] b);
public static extern int func_b(string a,string b);
private void button1_Click(object sender, EventArgs e)
{
if (func_a(out a,out b)==0); // 一般返回值为0时,表示成功
{
for(int i=0;i<a.Lengh;i++)
{
MessageBox.Show(func_b(a[i],b[i]).ToString());
}
}
}
补充:.NET技术 , C#