По умолчанию реализация IMarshal? - PullRequest
4 голосов
/ 24 октября 2010

Я пытаюсь реализовать COM-объяснение без регистрации в моем коде (не могу использовать COM без регистрации через манифест приложения, так как это работает только на уровне exe): я создаю статический класс, который загружает DLL библиотеки COM, вызывает DllGetClassObject, затем IClassFactory :: CreateInstance ().

Работает просто отлично в точку. Детали реализации на http://www.dimastr.com/redemption/security.htm#redemptionloader

Но если я создаю экземпляр своего COM-объекта из нескольких потоков (например, сначала в основном потоке, а затем во вторичном), .Net начинает запрашивать у моих объектов IMarshal, который я не реализую.

Если библиотека COM зарегистрирована в реестре, все работает нормально. Если библиотека не зарегистрирована в реестре (в этом и заключается весь смысл), .Net запрашивает IMarshal.

Есть ли способ получить реализацию IMarshal по умолчанию, которую COM использует внутренне? Или предотвратить его сбой, если мой объект не реализует IMarshal?

Спасибо!


1 Ответ

4 голосов
/ 14 ноября 2010

CoGetStandardMarshal используется для получения реализации по умолчанию; однако этот метод недокументирован - вам придется искать его, чтобы получить его прототип.

Однако, если вы не предоставляете интерфейс IMarshal, используется реализация по умолчанию . Поэтому я считаю, что проблема кроется в другом месте.

...