int Hoop();
- неправильный перевод декларации IDL на C #.
Правильный будет
void Hoop();
.NET упаковывает коды результата COM (HRESULT) в соответствующие исключения C #. Например, если вы вернете E_NOTIMPL в коде C ++, среда выполнения .NET выдаст экземпляр класса NotImplementedException
* UPDATE *
В соответствии с MSDN основной поток приложения по умолчанию инициализируется в 'MTA'. Ваш объект CSimpleObject сконфигурирован для размещения в «STA». Для выполнения вызовов между квартирами среда выполнения COM будет использовать вашу реализацию прокси / заглушки для маршалла соответствующих данных.
Среда выполнения нуждается в правильной реализации прокси / заглушки, которая генерируется MIDL из вашего файла IDL.
Вы пометили функцию «Обруч» как «Локальная». Это означает, что MIDL не будет генерировать какой-либо код сортировки для этого метода, поэтому вы получаете исключение.
Следует удалить атрибут «local», поскольку он предназначен для использования только внутри сервера, на котором реализован объект.
Но в качестве возможного решения я могу предложить вам использовать объект из потока, настроенного для работы в STA. В любом случае, это плохой подход, так как он не гарантирует, что никакая сортировка не будет задействована.
Вы можете пометить ваш основной поток для работы в STA следующим образом:
[STAThread()]
static void Main(string[] args)
{
...
}
Надеюсь, это поможет вам решить проблему.