Я пытаюсь вызвать следующий метод "foo" из c #:
interface IFoo : public IUnknown
{
virtual HRESULT __stdcall foo( BSTR * log ) = 0;
}
Вот как я это объявляю в c #:
[ComImport, Guid( "98D93A58-2889-43a5-A182-47DEE781D41E" ),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface IFoo
{
void foo( out string log );
}
Вот как я это называю в c #:
(x является экземпляром класса COM, который реализует IFoo)
string log;
x.foo( out log );
Когда я запускаю этот код, я получаю следующее исключение:
System.Runtime.InteropServices.MarshalDirectiveException was unhandled
Message=Marshaler restriction: Excessively long string.
Что я делаю не так?
Кстати, следующее работает правильно, если я вызываю "foo" из c ++ следующим образом:
CComBSTR log;
pX->foo( &log );