Что произойдет, если я использую OLE Automation для загрузки 32-битного элемента управления в 64-битное приложение? - PullRequest
1 голос
/ 06 октября 2009

.NET-приложение, за которое я отвечаю, использует сторонний элемент управления, который доступен только как 32-битный компонент COM. Некоторое время я бился головой о стены, пытаясь найти способ, позволяющий компоненту и приложению работать вместе в 64-битном режиме. Мы получили некоторую помощь от поставщика элементов управления - они не планируют поставлять 64-битную версию компонента в ближайшее время, но они подключили решение C #, которое использует элемент управления WebBrowser для загрузки компонента, и решение C ++, которое использует некоторую забавную OLE. код для получения ссылки на интерфейс элемента управления из WebBrowser.

Хорошей новостью является то, что код выполняет то, что должен делать; Компонент корректно загружается в 64-битном решении, и я стараюсь изо всех сил использовать свои старые, точные знания ATL, чтобы пробиться через решение C ++, чтобы выяснить, как извлечь интерфейс управления в наш C #.

Меня беспокоит то, что я недостаточно хорошо понимаю эту конфигурацию, чтобы определить, с какими проблемами я могу столкнуться с нашим приложением. Кто-нибудь сделал что-нибудь в этом роде? Мое главное беспокойство заключается в том, что мы могли бы начать видеть таинственные сбои, которые я в конечном итоге проследил до значения, искаженного 32-битным элементом управления, и я вернусь туда, откуда начал.

Элементом управления, для справки, является EModelViewControl от Solidworks, который включен в облегченную программу просмотра EDrawings. Это не особенно сложный элемент управления, хотя их автоматическая настройка немного интересна.

1 Ответ

3 голосов
/ 06 октября 2009

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

В этих связанных темах есть еще несколько деталей и ссылок:

64 бит C # с 32-битным объектом VB6 COM

Доступ к x86 COM из x64 .NET

...