Как передать данные в C # COM DLL из неуправляемого приложения - PullRequest
3 голосов
/ 20 мая 2011

С # COM DLL интерфейс:

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

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

SAFEARRAY *array;

array = SafeArrayCreateVector(VT_BSTR, 0, 1);

long lidx = 0;

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

hr = dlg->showMessage(array);

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

1 Ответ

4 голосов
/ 20 мая 2011

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

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

EDIT

Правильное имя в C ++ - VT_I1, а не VT_BYTE

...