【发布时间】:2012-09-24 08:44:01
【问题描述】:
我正在尝试通过 c++ DLL 将以下结构传递给 c#:
struct name
{ char* myArray[3];
char firstname[100];
char lastname[100];
};
void Caller(struct name * demo)
{
strcpy(demo->firstname,"hello");
demo->myArray[0]="hello";
demo->myArray[1]="hello";
demo->myArray[2]="hello";
ping(demo); //call to c# function
}
下面是我的 c# 代码:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct name
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string firstname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string lastname;
//what should i marshal here for char* myArray[3];
} ;
static void Main(string[] args)
{
name myname = new name();
ping( ref myname);
}
public static void ping(int a,ref name myname)
{
Console.WriteLine(myname.firstname+"\n");
}
我可以从 c++ dll 中导入名字和姓氏。
从c++导入char指针数组怎么办?
【问题讨论】:
-
你试过 public string[] myArray;
-
是的尝试过...但是在以下行中出现错误 IntPtr c= myname.myArray;
-
您需要将其声明为 IntPtr[] 并在使用 new IntPtr[3] 调用函数之前对其进行初始化。然后使用 Marshal.PtrToStringAnsi() 转换字符串。不可阻挡的内存泄漏的可能性很高。
-
不确定,但您可以声明它:[MarshalAs(UnmanagedType.ByValArray,SizeConst=3)] string[]
标签: c# c++ dll marshalling