当前位置:编程学习 > C#/ASP.NET >>

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,