Я пытаюсь выяснить, как реализовать пользовательское распределение для COM-сервера вне процесса, когда он запускает событие. Сервер реализует интерфейс IConnectionPoint. Один из методов интерфейса, который он вызывает для оповещения о событии, получает указатель на интерфейс (назовите его IMyEventData.). Класс, который реализует IMyEventData на сервере, также реализует IMarshal. Когда мой сервер запускает событие, я получаю ожидаемые вызовы IMarshal, включая GetMarshalSizeMax, GetUnmarshalClass и MarshalInterface. Пока все хорошо.
Я реализовал unmarshaller в отдельной DLL, которая зарегистрирована в системе. Сразу после того, как сервер обработает вызов MarshalInterface, моя unmarshaller DLL загружается в клиент, но вызовы, которые я получаю через его интерфейс IMarshal, не являются тем, что я ожидаю. Вызовы GetUnmarshalClass, GetMarshalSizeMax и MarshalInterface. Во всех этих вызовах контекст внутрипроцессный, по-видимому, пытается маршалировать через квартиры, а не обрабатывать границы. Я никогда не получаю ожидаемый вызов UnmarshalInterface. Когда я запускаю как клиент, так и сервер в отладчике, каждый из них отображает исключение в окне вывода сразу после вызова интерфейса IMarshal моего демаршаллера, указывая на то, что произошла неправильная ошибка параметра (0x80070057).
Может кто-нибудь сказать мне, что я делаю не так? Я ожидал, что мой unmarshaller получит вызов IMarshal :: UnmarshalInterface, чтобы получить доступ к данным, которые сервер предоставил при вызове IMarshal :: MarshalInterface. Я, должно быть, здесь упускаю что-то простое.
Спасибо.
Wayne