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);