Arrays CLI结构数组

Arrays CLI结构数组,arrays,command-line-interface,marshalling,Arrays,Command Line Interface,Marshalling,我已经尝试了我所能想到的一切,以使下面的工作。我试图把一个CLI结构数组传递到CLI方法中,并使CLI方法执行C++方法,C++方法访问类的指针,指针是类的数组。 当我只发送一个结构时,我就能够正确地封送,所以在我将其设置为数组之前。但至于数组,我不知道如何让它工作。每当我尝试获取CLI指针或重新解释CLI阵列时,我尝试的所有操作都会失败 请注意,以下不是实际代码,这是实际代码的复制粘贴/编辑,因为我无法上传原始代码,因为我已签署保密协议 // Not the actual CLI object

我已经尝试了我所能想到的一切,以使下面的工作。我试图把一个CLI结构数组传递到CLI方法中,并使CLI方法执行C++方法,C++方法访问类的指针,指针是类的数组。 当我只发送一个结构时,我就能够正确地封送,所以在我将其设置为数组之前。但至于数组,我不知道如何让它工作。每当我尝试获取CLI指针或重新解释CLI阵列时,我尝试的所有操作都会失败

请注意,以下不是实际代码,这是实际代码的复制粘贴/编辑,因为我无法上传原始代码,因为我已签署保密协议

// Not the actual CLI object, but a good reference and the actual CLI and original struct do work, tested...
[StructLayout(LayoutKind::Sequential, CharSet = CharSet::Ansi, Pack = 2)]
public ref struct CliExample{
    int Number;
    [MarshalAs(UnmanagedType::ByValTStr, SizeConst = 51)]
    String ^Description;
};

// CLI Code
long GetValue(List<CliExample^>^% Recs, long NoOfRecs)
{
    IntPtr ListPtr = Marshal::AllocHGlobal(Marshal::SizeOf(Recs));
    Marshal::StructureToPtr(Recs, ListPtr, false);

    Server->GetValue(reinterpret_cast<tExample*>(ListPtr.ToPointer()),NoOfRecs);
}

// Snippet of c++ code
long tLaunch::GetValue(tExample* Recs, long NoOfRecs)
{
}
//不是实际的CLI对象,而是一个很好的参考,实际的CLI和原始结构可以工作,经过测试。。。
[StructLayout(LayoutKind::Sequential,CharSet=CharSet::Ansi,Pack=2)]
公共引用结构示例{
整数;
[Marshallas(非托管类型::ByValTStr,SizeConst=51)]
字符串^描述;
};
//CLI代码
long GetValue(列表^%Recs,long NoOfRecs)
{
IntPtr ListPtr=Marshal::AllocHGlobal(Marshal::SizeOf(Recs));
Marshal::StructureToPtr(Recs、ListPtr、false);
服务器->获取值(reinterpret_cast(listpr.ToPointer()),NoOfRecs);
}
C/C++代码段
long-tLaunch::GetValue(tExample*Recs,long-NoOfRecs)
{
}

这行不通,保密协议阻止我告诉你原因。这没有任何意义,您已经有了本机类型(tExample)。使用适当大小的tExample[]调用本机代码,只需将返回的数据复制到列表中即可。一次一个字段,而不是一个结构。当封送处理程序试图释放返回的字符串时,尝试使用Marshal::PtrToStructure()会给您带来麻烦。你必须自己去做,任何适合本机代码的事情。lol@your comment,“nda阻止”:P我只提到了这一点,因为一些聪明人总是评论说代码不完整等等。。。或者提到拼写错误会导致编译错误。。。不过谢谢你的帮助,我会像你提到的那样一次复制一个结构。