System.Array против Byte[] при использовании CodeDom

Я ссылаюсь на DLL-файл COM, используя CodeDom. Функция в файле dll имеет следующие параметры:

Public Function Foo(fooString As String, fooByte() As Byte) 
End Function

Когда на этот dll-файл ссылается непосредственно Visual Studio (без использования CodeDom), я вызываю эту функцию следующим образом — и решение создается без проблем:

Byte[] b = File.ReadAllBytes("Test.exe");
DllName.DllClass dll_obj_reference = new DllName.DllClass();

dll_obj_reference.Foo("data", b);

ПРИМЕЧАНИЕ. Хотя я отправляю в функцию массив байтов (согласно запросу VB6), Visual Studio на самом деле запрашивает тип System.Array. По какой-то причине решение по-прежнему строится нормально, и я могу без проблем вызвать функцию Foo.

Однако мне не так повезло, когда я делаю все это через CodeDom. Я добавляю interop.DllName в качестве ссылки на сгенерированный проект и вызываю точно так же. Однако на этот раз CodeDom выдает ошибку, говорящую о том, что он не может преобразовать тип byte[] в тип ref System.Array.

Итак, мой вопрос - наконец: как я могу преобразовать массив байтов, показанный выше, в тип System.Array? Я не могу найти статьи в Интернете.

Спасибо за любую помощь!


person Community    schedule 07.10.2011    source источник
comment
@BenVoigt Обновлено с правильным форматированием.   -  person    schedule 07.10.2011


Ответы (2)


Если ему нужен массив, переданный по ссылке, вы должны сделать:

dll_obj_reference.Foo("data", ref b);
person Ben Voigt    schedule 07.10.2011
comment
Нет, я получаю сообщение об ошибке следующего содержания: «Аргуменет 2: невозможно преобразовать из «ref byte[]» в «reef System.Array». - person ; 07.10.2011
comment
Это должно сказать ref System.Array, конечно. Извините за путаницу. - person ; 07.10.2011
comment
@Evan: Тогда попробуй Array a = b; dll_obj_reference.Foo("data", ref a); if (a != b) { /* figure out how to copy the elements from the new array created inside the DLL, given to you as a */ } - person Ben Voigt; 07.10.2011

Вы можете преобразовать массив байтов в System.Array

Byte[] b = File.ReadAllBytes("Test.exe");

Array barr = (Array)b;

DllName.DllClass dll_obj_reference = new DllName.DllClass();

dll_obj_reference.Foo("data", barr);
person OAkbas    schedule 13.11.2019