Как только я добавляю сервер COM в приложение сервера COM +, я больше не могу создавать его экземпляры in-proc - почему? - PullRequest
0 голосов
/ 15 марта 2011

У меня есть 32-битная библиотека COM-сервера, и мне нужно использовать ее как из 32-битных, так и из 64-битных приложений.Я могу создать приложение сервера COM +, и тогда будет создан экземпляр COM-сервера в суррогатном процессе.

Проблема в том, что я больше не могу создавать его экземпляр как сервер in-proc (флаг CLSCTX_INPROC_SERVER передан CoCreateInstance()) - я получаю "класс не зарегистрирован".Это не очень хорошо, потому что теперь даже 32-битные приложения должны общаться с суррогатным процессом, и это добавляет ненужные издержки на маршаллинг.

Как я могу настроить приложение сервера COM + таким образом, чтобы клиенты имели одинаковую битностьвсе еще можно использовать COM-сервер in-proc?

Ответы [ 2 ]

0 голосов
/ 16 марта 2011

Это, вероятно, связано с COM +, который хранит кэш недавно активированных объектов. Смотрите комментарии ниже эта статья .

0 голосов
/ 15 марта 2011

32-разрядные библиотеки DLL могут быть загружены только в 32-разрядных процессах, а 64-разрядные библиотеки DLL - в 64-разрядных процессах (причинами являются разные размеры указателей, но также и соглашения о вызовах).Таким образом, невозможно использовать COM-объект из 32-разрядной внутрипроцессной серверной DLL в 64-разрядном приложении, поскольку система не будет загружать DLL.Реестр Windows также имеет два разных представления: одно для 64-битных приложений и одно для 32-битных приложений.Ваша библиотека, интерфейсы и дополнительные классы из 32-разрядной библиотеки DLL зарегистрированы в 32-разрядном представлении, поэтому они не видны для 64-разрядных приложений, поэтому вы получаете это сообщение.

Требуется обходной путьдля этого и самый простой обходной путь - создать 32-битный исполняемый файл вне процесса, который содержит оболочку COM, которая действует как прокси (или фасад) для прежнего COM-объекта.В вашем 64-битном приложении вы будете использовать эту новую оболочку.Вы можете прочитать больше об этом здесь: http://www.dnjonline.com/article.aspx?id=jun07_access3264.

...