В приложении, которое меня попросили разработать, я должен взаимодействовать с DLL, над которым у меня нет контроля.
Из длл я звоню:
NAMESPACE.myFunction(string Name, int[*] Coordinates)
Что это за тип int [*]? Ответ был легко найден здесь : это не основанный на 0 массив. В этом вопросе кратко упоминаются некоторые скомпилированные в LabView библиотеки DLL, что очень похоже на мой настоящий случай.
Я смог определить с помощью исследования, что только Array
может иметь тип int32[*]
. Простой способ доказать это - запустить этот код:
Array AAA = Array.CreateInstance(typeof(int), 4, 0);
Array AAA2 = Array.CreateInstance(typeof(int), 4, 1);
Array BBB = Array.CreateInstance(typeof(int), 4);
Array CCC = Array.CreateInstance(typeof(int), new int[] { 4 } , new int[] { 0 } );
Array DDD = Array.CreateInstance(typeof(int), new int[] { 4 });
int[] arr1 = (int[])Array.CreateInstance(typeof(int), 4);
int[] arr2 = (int[])Array.CreateInstance(typeof(int), new int[] { 4 }, new int[] { 0 });
Array arr3 = Array.CreateInstance(typeof(int), new int[] { 4 }, new int[] { 1 });
Console.WriteLine("AAA.type: " + AAA.GetType()); \\ System.Int32[,]
Console.WriteLine("AAA2.type: " + AAA2.GetType()); \\ System.Int32[,]
Console.WriteLine("BBB.type: " + BBB.GetType()); \\ System.Int32[]
Console.WriteLine("CCC.type: " + CCC.GetType()); \\ System.Int32[]
Console.WriteLine("DDD.type: " + DDD.GetType()); \\ System.Int32[]
Console.WriteLine("---");
Console.WriteLine("arr1.type: " + arr1.GetType()); \\ System.Int32[]
Console.WriteLine("arr2.type: " + arr2.GetType()); \\ System.Int32[]
Console.WriteLine("arr3.type: " + arr3.GetType()); \\ System.Int32[*]
Вопрос, на который я не могу найти ответ: как передать тип Array в вызов метода без ошибки типа преобразования ? Ошибка вызвана этим вызовом:
NAMESPACE.myFunction("", arr3)
^
Cannot convert from 'System.Array' to 'int[*]'