我用c#编写了一个DLL,并在主函数调用它,代码如下
Void Thread_Callback()
{
string Path = "E:\\vs2022_Pro\\dll_test";
if(File.Exists(Path) == false)
{
MessageBox.Show("not found dll");
return;
}
Assembly assembly_1 = Assembly.LoadForm(Path);
Type type_1 = Assembly.GetType("ADC_Data.Draw_Picture",false);
if(type_1 == null)
{
MessageBox.Show("Load dll error");
return;
}
MethodInfo method = type_1.GetMethod("Draw_Picture");
method.Invoke(assembly_1,需要传入的二维数组);
}
在最后method.Invoke提示需要传入的是object[]型数据,我的二维数组是104行2000列 把他拆分成一维数组也不现实,请问需要怎么做
Invoke需要的数组,这里说的是参数
比如Draw_Picture的函数原型是
void Draw_Picture(byte[] arr)
那么就是
method.Invoke(assembly_1,new object[] { arr });
站内查询的信息是使用Array.ConvertAll(二维数组,row=>row.ToArray());
但是我在实际编写程序的时候没有ToArray方法,不知道为什么
(补充一点,我的二维数组是short型)
【以下回答由 GPT 生成】
要将二维数组转换为object[]
,可以使用C#中的Enumerable.Cast
方法和Enumerable.ToArray
方法来实现。
以下是一个例子,展示如何将一个名为array
的二维数组转换为object[]
:
object[] array1D = array.Cast<object>().ToArray();
这里的array
是你的二维数组,array1D
是转换后得到的一维数组。通过Cast<object>()
方法,我们将二维数组中的每个元素都转换为object
类型,然后使用ToArray()
方法将转换后的元素组成一个新的数组。
在你的代码中,你可以将这个转换过程添加到method.Invoke
的参数中:
method.Invoke(assembly_1, yourArray.Cast<object>().ToArray());
确保将yourArray
替换为你实际的二维数组变量。
这样,你就可以将二维数组转换为object[]
并传递给你的method.Invoke
函数了。
请注意,在此方法中,我们将二维数组中的所有元素都转换为object
类型。如果你的二维数组中包含其他类型的元素,你需要适当地修改Cast<object>()
方法的参数。
【相关推荐】