Как передать данные в C # COM DLL из неуправляемого приложения

#c# #c #dll #com

#c# #c #dll #com

Вопрос:

С# COM DLL Interface:

 public interface IShowDialog
{
   void showMessage(byte[] array);
}
  

и вызвать его в неуправляемом приложении C :

 SAFEARRAY *array;

array = SafeArrayCreateVector(VT_BSTR, 0, 1);

long lidx = 0;

SafeArrayPutElement( array, amp;lidx, SysAllocString(L"test") );

hr = dlg->showMessage(array);
  

Результат: 0x80131533 - COR_E_SAFEARRAYTYPEMISMATCH

Ответ №1:

COM-интерфейс должен вызываться из собственного кода с SAFEARRAY содержимым VT_I1 которого являются экземпляры. Вместо этого вы предоставляете VT_BSTR значения и, следовательно, получаете ошибку.

Вам нужно преобразовать строковое значение в VT_I1 значения и поместить их в массив.

Редактировать

Собственное имя в C — это VT_I1 , а не VT_BYTE

Комментарии:

1. 1 Согласен, что передаваемый тип safearray должен соответствовать объявленному типу, но я бы сказал, что IShowDialog::ShowMessage должен принимать строку (COM BSTR), а не байт[]