![]() |
Модераторы: MetalFan |
![]() ![]() ![]() |
|
Гость_vitek |
|
|||
Unregistered |
Реализую трехзвенную архитектуру (DataSnap+ADO). Сервер реализован в виде библиотеки ActivX + Remote Data Modul. В итшге получается DLL. Клиент подключается через DCOMConnection.
ПРОБЛЕМА: В удаленном модуле (Remote Data Modul) у компонента ADOConnection мне необходимо программно формировать свойство ConnectionString. При использовании GetCurrentDir функция возвращает путь НЕ dll-сервера, а клиентского приложения. (Это естественно, т.к. сервер получился внутрипроцессорным и создается в адресном пространстве клиента). ВОПРОС: Как все-таки узнать путь dll-сервера и написать процедуру в Remote Data Modul по формирования ConnectionString? |
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Как вариант, можешь хранить путь реестре.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Гость_vitek |
|
|||
Unregistered |
Когда регистрируется dll-сервер, то в реестре итак вместе с GUID записывается путь. Но как среди нескольких локальных компьютеров определить, на каком из них установлен сервер?
(К тому же через реестр не лучший выход, т.к. в разных windows эта информация возможно заносится в разные ветви реестра) |
|||
|
||||
mutex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.10.2004 Репутация: нет Всего: 3 |
А не может ли сам сервер, т.е. DLL-библиотека, иметь свойство или метод, который возвращает его полный сетевой адрес?
|
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
GetCurrentDir тут вообще не в кассу - он, кстати, может и не совпадать с местоположением программы. Тебе нужно использовать GetModuleFileName. -------------------- Волны гасят ветер... |
|||
|
||||
Гость_vitek |
|
|||
Unregistered |
Если можно поподробнее о GetModuleFileName: метод какого класса? и если можно пример.
|
|||
|
||||
<Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: нет Всего: 64 |
Это не метода класса, а функция из Windows.pas. Вот пример:
Это сообщение отредактировал(а) <Spawn> - 14.1.2005, 12:38 -------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
Гость_vitek |
|
|||
Unregistered |
Проверил код. Выдает все тот же путь приложения-клиента. Код вставлял и в саму библиотеку (library) и в удаленный модуль (unit).
|
|||
|
||||
Fantasist |
|
||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Потому что нефига первым параметром (hModule) передавать 0. В этом случае вы всегда получите имя модуля создавшего процесс. В Delphi в юните SysInit определяется глобальная переменная hInstance, котрая принимает значение handle модуля. Именно ее и надо передавать.
Это сообщение отредактировал(а) Fantasist - 14.1.2005, 19:36 -------------------- Волны гасят ветер... |
||||
|
|||||
Гость_vitek |
|
|||
Unregistered |
Работает! Огромное спасибо Fantasist и всем кто принимал участие в обсуждении.
Последний вопрос: если клиент и сервер стоят на разных машинах, то выведет ли эта функция полное UNC имя? (хотя, наверное, нет) |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Нет конечно. Хендл модуля не будет валидным на другом компьютере - это же очевидно. -------------------- Волны гасят ветер... |
|||
|
||||
Гость_vitek |
|
|||
Unregistered |
Еще раз спасибо.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: ActiveX/СОМ/CORBA" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |