как передать байтовый массив из клиентского приложения CSharp в COM-объект ATL - PullRequest
1 голос
/ 05 августа 2011

Я хочу написать приложение с помощью csharp, которое считывает содержимое файла и передает его в COM-объект ATL.

У меня проблема с IDL. Я определил метод с именем «Decode» для объекта ATL-COM, как показано ниже:

[id(101), helpstring("Decode")] HRESULT Decode([in] BYTE* pBuff, [in] INT nLen, [out, retval] INT* pnRetVal);

Но, когда я скомпилировал свой собственный COM-dll и захотел использовать его в приложении CSharp, я нашел метод с такой подписью:

int MyClass.Decode(ref byte pBuff, int nLen);

Но я исключил, что у меня есть такой метод:

    int MyClass.Decode(byte[] pBuff, int nLen);

У вас есть предложения? Я также пробовал разные типы, такие как VARIANT * или BYTE **, но я ищу лучшее решение.

1 Ответ

2 голосов
/ 05 августа 2011

Согласно этой ссылке , вы должны объявить свою функцию как принимающую SAFEARRAY(byte) внутри IDL.

Кроме того, передавая VARIANT (который отображается как objectна стороне C #), при условии, что вы извлечете SAFEARRAY внутри кода C ++.

...