#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), а не байт[]