C++ 在C#中将数组数组传递给DLL的安全方法是什么?

C++ 在C#中将数组数组传递给DLL的安全方法是什么?,c++,arrays,dll,c#-3.0,C++,Arrays,Dll,C# 3.0,我有一个要传递到DLL的数组数组。我遇到了错误“没有对嵌套数组的封送处理支持” 我可以很好地传递单个数组,但如果我将它们堆叠起来,它就会失败。我需要/想要一种“安全”的方式传入数组 private static extern int PrintStuff(string[][] someStringsInGroups, int numberOfGroups, int[] lengthSetsInGroups); 编辑:我也愿意,带着足够的沮丧和痛苦,接受涉及封送的解决方案。您可以将双数组转换为单

我有一个要传递到DLL的数组数组。我遇到了错误“没有对嵌套数组的封送处理支持”

我可以很好地传递单个数组,但如果我将它们堆叠起来,它就会失败。我需要/想要一种“安全”的方式传入数组

private static extern int PrintStuff(string[][] someStringsInGroups, int numberOfGroups, int[] lengthSetsInGroups);

编辑:我也愿意,带着足够的沮丧和痛苦,接受涉及封送的解决方案。

您可以将双数组转换为单数组(即展平它)。这可以通过保持宽度和高度变量,并访问如下索引来实现:

string atXY = someStringsInSingleArray[(y * width) + x];
然后可以将阵列转换为:

string * array = new string[width * height];

for (unsigned int y = 0; y < height; ++y)
{
    for (unsigned int x = 0; x < width; ++x)
    {
        array[(y * width) + x] = someStringsInGroups[x][y];
    }
}

// (pass single array to dll)

delete [] array;
string*array=新字符串[宽度*高度];
用于(无符号整数y=0;y<高度;++y)
{
用于(无符号整数x=0;x
我刚刚偶然发现了一种可能不那么安全但速度更快的方法,因为只分配了指针

它是德语的,但是页面末尾的代码可以复制/粘贴。在我的例子中,我只是使类泛型,不仅支持double


请注意,我不知道字符串[],因为我假设字符串被封送到char*,所以您将使用char[][],而不是像示例中那样使用双重[]。

为了推广这一想法,您可以将2D数组放入任何可序列化的形式,如1D数组,甚至是字符串。我在It数组之前已经连续地输入了一些数据,甚至在C++方面做了一些支柱的浇铸,这样你就可以读取你将数据分配给(O[i] ValueV.S.O[i](7))。当一个字符串被传递到DLL中时,它会被封送,并在其末尾加上一个Null。如果我自己序列化它,我将不得不添加这些。没什么大不了的,但代码本身让我周围的技术人员感到局促不安。另一个要求是所有代码在C#中都是“安全的”。另一个解决方案是手动实际存储数据:(