我有一个定义为
的结构struct DiskInfo{
int size,
char **atributes
};
我需要将它发送到运行类似
的c ++ dllfor(i=0;i<Files.count;i++)
{
newList[i] = (wchar_t *)malloc(sizeof(List->Strings[i]));
wcscpy(newList[i], List->Strings[i]);
.... more code
}
此时我的结构poplutaed将所有数据,我需要将其发送回c#。 我试过了:
internal struct DiskInfo
{
internal int size;
[MarshalAs(UnmanagedType.ByValArray)]
internal string[] Files;
}
,签名是
[DllImport("Disk.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = GetDiskInfo")]
internal static extern uint GetDiskInfo(
[In, Out]
DiskInfo Param);
并致电函数
data= new DiskInfo();
Native.GetDiskInfo(data);
但是,数据始终返回null。 我做错了什么?
答案 0 :(得分:1)
在C#中,DiskInfo是一个结构,这意味着它是一个值类型,并将通过复制传递给方法(除非使用了ref关键字)。所以C ++代码不可能修改原始结构,只修改副本。如果您使用ref关键字声明GetDiskInfo并且在方法调用中也使用了该关键字,那么您可能会更好运。