C# C语言中的GCHandle错误

C# C语言中的GCHandle错误,c#,multidimensional-array,C#,Multidimensional Array,也许有人能帮我。。下面的代码将一个2D字符串数组从C传递到C++,它在GCHandle上运行到了一个错误:在MyLyb.DLL中出现了一个未处理的类型“Stray.AgMuMutExtExchange”异常。 附加信息:对象不包含任何基本信息。 实际上,它与双2D完美结合 public static extern void DDentry ( [In][MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.BStr)] strin

也许有人能帮我。。下面的代码将一个2D字符串数组从C传递到C++,它在GCHandle上运行到了一个错误:在MyLyb.DLL中出现了一个未处理的类型“Stray.AgMuMutExtExchange”异常。 附加信息:对象不包含任何基本信息。 实际上,它与双2D完美结合

public static extern void DDentry
(
[In][MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.BStr)] string[,] arrayReadDat, int iDim1, int iDim2
);

    private void button6_Click_1(object sender, EventArgs e)
    {
        Excel.Application appExcelREAD = new Excel.Application();
        appExcelREAD.Visible = true;

        string workbookPath = "C:\\Users\\Redstone\\Desktop\\eva_excel_input.xlsx";     // input file

        Excel.Workbook excelWorkbook1 = appExcelREAD.Workbooks.Open(workbookPath,
        0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);

        Excel.Worksheet excelWorksheet1 = appExcelREAD.Worksheets["Tabelle1"];

        int lastRow = excelWorksheet1.UsedRange.Rows.Count;
        int lastCol = excelWorksheet1.UsedRange.Columns.Count;

        string[,] arrayReadDat = new string[lastRow+1, lastCol+1];

        for (int i = 2; i <= lastRow; i++)
        {
            for (int j = 1; j <= lastCol; j++)
            {
                arrayReadDat[i, j] = excelWorksheet1.Cells[i, j].Value2.ToString();
            }
        }

        excelWorkbook1.Close();
        appExcelREAD.Quit();

        GCHandle gch = GCHandle.Alloc(arrayReadDat, GCHandleType.Pinned);
        IntPtr pArrayData = gch.AddrOfPinnedObject();

        DDentry(arrayReadDat, lastRow+1, lastCol+1);

        gch.Free();

一个System.Double是一个,System.String不是,这就是ArgumentException和所说的。你的问题到底是什么?它只是告诉你你试图做的事情永远不会成功,数组将被固定,但字符串不会被固定。你帮的太多了,停止使用GCHandle。您需要解决的下一个问题是,本机代码不知道如何为该数组编制索引,它知道该数组的秩。首先编写也可以从本机代码调用的本机代码,然后再尝试pinvoke。实际上,我忘了输入[DllImportC:\\Users\\Redstone\\Documents\\Visual Studio 2015\\Projects\\Win32Project2\\Debug\\Win32Project2.dll,EntryPoint=DDentry,CallingConvention=CallingConvention.StdCall]同样的代码对二维双数组也能很好地工作。汉斯:当然,我不是那种专家。如何将2D字符串数组从C传递到C++?如前所述,它适用于整数和双精度。如何修改字符串?多谢。克里斯蒂安:问题是简单地通过C++将二维字符串数组ARRAYRADDAT[i,j]从C传递到C++,LASTROW + 1,LASTCOL+1…非常感谢。