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