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