日期:2014-05-18  浏览次数:20691 次

c#中调用DLL(C++)以显示多行字符串的问题!
以前在C#中调用DLL,以显示两行字符串,能够实现;但是现在要显示多行(4行),修改C#代码却一直未能实现;
请求高手指点:
DLL函数原形:char **fun()
此为显示两行字符串:
  IntPtr p = Class2.func(); //Class2为调用DLL声明,此处省略(不影响该程序)
  IntPtr ptr = Marshal.ReadIntPtr(p); //指向字符串的指针;
  string[] sss = new string[2];
  sss[0] = Marshal.PtrToStringAnsi(ptr);
  Response.Write("the value is:" + sss[0]);
  Response.Write("<br>");
  //移动ptr的值
  ptr = Marshal.ReadIntPtr(p, Marshal.SizeOf(ptr));
  sss[1] = Marshal.PtrToStringAnsi(ptr);
  Response.Write("the oid is:" + sss[1]);
要显示4行字符串,请问:如何修改?

------解决方案--------------------
另:我定义的函数需改成:char **func(const string &str),这样做会涉及类的封装问题,
应该改成这样:char **func(const char* pStr)
C#定义:
public static extern IntPtr func(string s);


------解决方案--------------------
当status!=SNMP_CLASS_SUCCESS时,把申请的内存空间给释放了,然后在C#里ReadIntPtr,不错才怪
------解决方案--------------------
C/C++ code
 char** _stdcall func(char *pStr)
 {
     char **p=new char *[5]; 
     p[0]=new char[100]; 
     p[1]=new char[100]; 
     p[2]=new char[1000]; 
     p[3]=new char[100]; 
     strcpy(p[0],"abc1"); 
     strcpy(p[1],"abc2"); 
     strcpy(p[2],"abc3"); 
     strcpy(p[3],pStr); 
     return &p[0]; 

 }