Типы ЭЛТ через границы процесса - PullRequest
1 голос
/ 06 июля 2010

Я делаю перетаскивание из элемента управления ActiveX.При перетаскивании я предоставляю CComQIPtr, в котором реализованы COM-методы для передачи информации в целевой объект.При отбрасывании процесс объекта назначения вызывает мои COM-методы для получения информации.

Разрешено ли мне использовать типы CRT или указатели на типы CRT вблизи этой границы интерфейса?Я хотел бы, чтобы у моего IDataObject был личный std :: list и некоторые std :: strings, а на внешней стороне интерфейса была возможность вызывать мои COM-методы, которые могут обращаться к этим закрытым членам.

Iдумаю, что все в порядке, потому что я на самом деле не передаю типы CRT через границу.

MSDN: Потенциальные ошибки при прохождении объектов CRT через границы DLL

1 Ответ

2 голосов
/ 06 июля 2010

Вы можете использовать все, что вам нравится в реализации вашего com-объекта, поскольку он всегда остается в процессе (или dll), который его создает.

Вам необходимо придерживаться COM-типов в вашем COM-интерфейсе, чтобы типы можно было распределить между процессом, в котором используется ваш объект, и процессом, в котором был создан ваш объект.

Вы правы. Эта статья не относится к этой ситуации, поскольку вы ничего не пропускаете через границу. Инфраструктура COM имеет дело с маршалингом типов COM через границу для вас.

Просто убедитесь, что вы перехватываете все исключения внутри ваших методов COM, вы не можете позволить им вытекать из функции, поскольку инфраструктура COM не знает, что с ними делать.

Лично я склонен иметь тонкий слой кода COM, который имеет дело с преобразованием между типами COM и «нормальными» типами, а затем вызывает код, который выполняет реальную работу (см. здесь ). Этот уровень включает обработчик исключений, который перехватывает все и преобразует в соответствующие HRESULT.

...