C# 将带有字符串动态数组的struct发送到c++;来自c的dll#

C# 将带有字符串动态数组的struct发送到c++;来自c的dll#,c#,c++,dll,interop,C#,C++,Dll,Interop,我有一个结构定义为 struct DiskInfo{ int size, char **atributes }; 我需要把它发送到C++的DLL,它将运行类似于的东西。 for(i=0;i<Files.count;i++) { newList[i] = (wchar_t *)malloc(sizeof(List->Strings[i])); wcscpy(newList[i], List->Strings[i]); .... more code } 签

我有一个结构定义为

struct DiskInfo{
int size,
char **atributes
};
我需要把它发送到C++的DLL,它将运行类似于

的东西。
for(i=0;i<Files.count;i++)
{
   newList[i] = (wchar_t *)malloc(sizeof(List->Strings[i]));  
   wcscpy(newList[i], List->Strings[i]);
  .... more code
 }
签名是

[DllImport("Disk.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = GetDiskInfo")]
    internal static extern uint GetDiskInfo(
       [In, Out] 
        DiskInfo Param);
和调用函数

 data= new DiskInfo();
 Native.GetDiskInfo(data);
但是,数据总是以null返回。
我做错了什么?

在C#中,DiskInfo是一个结构,这意味着它是一个值类型,将通过复制传递到方法中(除非使用ref关键字)。因此C++代码不可能修改原始结构,只修改副本。如果您使用ref关键字声明GetDiskInfo并在方法调用中使用该关键字,您可能会更幸运。

在C#中,DiskInfo是一个结构,这意味着它是一个值类型,将通过复制传递到方法中(除非使用ref关键字)。因此C++代码不可能修改原始结构,只修改副本。如果您使用ref关键字声明GetDiskInfo,并在方法调用中使用该关键字,您可能会更幸运。

我很困惑。这里所示的C++和C++结构具有不同的名称、不同的成员顺序,C++版本不包含“ByVar”数组。这些应该是相同的结构吗?修正了是的,它们是相同的结构我很困惑。这里所示的C++和C++结构具有不同的名称、不同的成员顺序,C++版本不包含“ByVar”数组。这些应该是相同的结构吗?修正了是的,它们是相同的结构
 data= new DiskInfo();
 Native.GetDiskInfo(data);