读书人

c#中调用DLL(C++)以显示多行字符串的有

发布时间: 2012-01-21 21:31:43 作者: rapoo

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];  } 

读书人网 >C#

热点推荐