gifts2017

Доступ к 64-бит COM-объекту из 32-бит приложения

Опубликовал Илья Бобков (blumawolf) в раздел Программирование - Практика программирования

Доступ к 64-бит COM-объекту из 32-бит приложения - в частности, доступ к 64-битным драйверам Oracle ODBC из 32-битного приложения 1С.

Столкнувшись с проблемой доступа из 32-битного приложения 1С к 64-битному COMОбъекту (в данном случае - драйвер Oracle ODBC), я решил эту аналогично проблеме доступа из 64-битного приложения (1С-сервер) к 32-битному драйверу.

Почему нельзя было установить и использовать 32-битный COM-Объект?
Потому что два клиента Oracle (32-бит и 64-бит) плохо уживаются на одном компьютере (либо я не умею их уговаривать).

Почему я написал эту заметку?
Потому что я не нашел (либо не старался особо в поисках) упоминания  о запуске 64-битного ком-объекта в 32-битной среде.

 

а) Создание "обертки" COM-Объекта (аналогично созданию обертки запуска 32-битных оберток в 64-битном приложении).

 *) Открыть "Службы компонентов"

 *) "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+" (щелкнуть правой кнопкой мыши, выбрать "Создать"-"Приложение")

 *) "Далее", "Создать новое приложение", указать имя для нового приложения, к примеру "v8_ADODB", выбрать способ активации - "Серверное приложение"

 *) Удостоверение приложения - указать пользователя (или оставить - "Текущий (вошедший в систему) пользователь)"), "Далее"

 *) Роли - оставить роль "CreatorOwner", "Далее"

 *) "Добавление пользователей для ролей" - раскрыть "CreatorOwner", выбрать "Users", нажать "Добавить" (при необходимости), добавить пользователей, имеющих право на работу с данным объектом, "Далее", "Готово"

 *) Раскрыть приложение, выбрать "Компоненты", щелкнуть правой кнопкой мыши - выбрать "Создать" - "Компонент"

 *) "Установка новых компонентов" - выбрать компоненты (их dll файлы), к примеру для ADODB имя файла можно найти через "Редактор реестра" (regedit), поиском по имени ком-объекта (искать пока не откроется ветка HKEY_CLASSES_ROOT\CLSID\{некий идентификатор}\ProgID), после чего открыть ветку InprocServer32 в том же разделе, в поле "(По умолчанию)" будет значение с dll файлом - его и установить.

 *) Задать нужные права - щелкнуть правой кнопкой мыши по установленному компоненту, выбрать закладку "Безопасность", установить флажок напротив "CreatorOwner"

 

б) Переименование основного компонента путем:

 *) Правой кнопкой мыши щелкнуть по компоненту (к примеру - ADODB.Connection.6.0), выбрать "Псевдоним...";

 *) В поле "Новый код ProgID:" ввести новый уникальный идентификатор для объекта, к примеру "ADODB.Connection.6.0/64"

 *) Задать нужные права - щелкнуть правой кнопкой мыши по "скопированному" компоненту, выбрать закладку "Безопасность", установить флажок напротив "CreatorOwner"

в) В коде приложения использовать создание ком-объекта с новым идентификатором, к примеру (для 1С v8):

  ОбъектODBC = Новый COMОбъект("ADODB.Connection.6.0/64");


См. также

Подписаться Добавить вознаграждение

Комментарии

1. Олег Филиппов (comol) 30.09.15 10:35
Сказать "баян" ничего не сказать в данном случае :)
2. Илья Бобков (blumawolf) 30.09.15 11:52
(1) comol, дай, пожалуйста, ссылку на аналогичную заметку - я удалю эту.
3. Олег Филиппов (comol) 01.10.15 10:41
(2) blumawolf, Юзаем поиск, набираем там COM+ или COM 64 и получаем:
http://infostart.ru/public/197627/ - тут с картинками
http://infostart.ru/public/93643/ - тут самое старое
http://infostart.ru/public/325873/ - тут для извращенцев
http://infostart.ru/public/294140/ - тут вспомнили что ещё COM+ объект можно на удаленной машине создать.
Дальше не продолжаю. Тема очень известная и очень избитая. По-моему её уже все выучили и с закрытыми глазами проделывают. Успехов.
4. Илья Бобков (blumawolf) 02.10.15 04:33
(3) comol,
Ага -))) Эти я видел, но там чуток об другом - там о запуске 32-битных объектов в 64-битной среде...
А тут у меня обратная проблема возникла - 64-битный объект в 32-битной среде запускать.
И вот тут без пункта "б" моей статьи (в частности для ODBC) - у меня ну никак не выходило.
Только поэтому и добавил заметку.

Напомню - основная суть в том, чтобы использовать 64-битный ODBC драйвер Оракла в 32-битной среде клиента 1С.
Проблема возникла еще и потому, что одновременная работа 32-бит и 64-бит клиентов Оракла на одном компьютере изрядно затруднена.
5. Илья Бобков (blumawolf) 05.10.15 08:29
Примечание -
Если необходим доступ из 64-битного приложения к 32-битному ODBC, тогда надо указывать не 64-битный, а 32-битный драйвер.
В частности, в 64-битной ОС Windows, драйвер ODBC находится:
64-битный: C:\Program Files\Common Files\System\ado\msado15.dll
32-битный: C:\Program Files (x86)\Common Files\System\ado\msado15.dll
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа