Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DataSnap+ADO, Проблема определения пути dll-сервера 
:(
    Опции темы
Гость_vitek
Дата 10.1.2005, 11:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Реализую трехзвенную архитектуру (DataSnap+ADO). Сервер реализован в виде библиотеки ActivX + Remote Data Modul. В итшге получается DLL. Клиент подключается через DCOMConnection.

ПРОБЛЕМА: В удаленном модуле (Remote Data Modul) у компонента ADOConnection мне необходимо программно формировать свойство ConnectionString. При использовании GetCurrentDir функция возвращает путь НЕ dll-сервера, а клиентского приложения. (Это естественно, т.к. сервер получился внутрипроцессорным и создается в адресном пространстве клиента).

ВОПРОС: Как все-таки узнать путь dll-сервера и написать процедуру в Remote Data Modul по формирования ConnectionString?
  Вверх
<Spawn>
Дата 11.1.2005, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Как вариант, можешь хранить путь реестре.


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_vitek
Дата 12.1.2005, 10:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Когда регистрируется dll-сервер, то в реестре итак вместе с GUID записывается путь. Но как среди нескольких локальных компьютеров определить, на каком из них установлен сервер?
(К тому же через реестр не лучший выход, т.к. в разных windows эта информация возможно заносится в разные ветви реестра)
  Вверх
mutex
Дата 13.1.2005, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: нет
Всего: 3



А не может ли сам сервер, т.е. DLL-библиотека, иметь свойство или метод, который возвращает его полный сетевой адрес?
PM MAIL   Вверх
Fantasist
Дата 14.1.2005, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
При использовании GetCurrentDir


GetCurrentDir тут вообще не в кассу - он, кстати, может и не совпадать с местоположением программы. Тебе нужно использовать GetModuleFileName.




--------------------
Волны гасят ветер...
PM MAIL   Вверх
Гость_vitek
Дата 14.1.2005, 09:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Если можно поподробнее о GetModuleFileName: метод какого класса? и если можно пример.
  Вверх
<Spawn>
Дата 14.1.2005, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: нет
Всего: 64



Это не метода класса, а функция из Windows.pas. Вот пример:

Код

procedure TForm1.Button2Click(Sender: TObject);
const
 FILE_NAME_SIZE = 256;
var
 FileName: PAnsiChar;
begin
 GetMem(FileName, FILE_NAME_SIZE);
 try
   ZeroMemory(FileName, FILE_NAME_SIZE);
   GetModuleFileName(0, FileName, FILE_NAME_SIZE);
   ShowMessage(FileName);
 finally
   FreeMem(FileName, FILE_NAME_SIZE);
 end;
end;


Это сообщение отредактировал(а) <Spawn> - 14.1.2005, 12:38


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Гость_vitek
Дата 14.1.2005, 16:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Проверил код. Выдает все тот же путь приложения-клиента. Код вставлял и в саму библиотеку (library) и в удаленный модуль (unit).
  Вверх
Fantasist
Дата 14.1.2005, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
Проверил код. Выдает все тот же путь приложения-клиента. Код вставлял и в саму библиотеку (library) и в удаленный модуль (unit).


Потому что нефига первым параметром (hModule) передавать 0. В этом случае вы всегда получите имя модуля создавшего процесс.


В Delphi в юните SysInit определяется глобальная переменная hInstance, котрая принимает значение handle модуля. Именно ее и надо передавать.


Код

function ModuleFileName:string;
const
 BUF_SIZE = 1024;
var
 size:integer;
begin
 SetLength(Result,BUF_SIZE);
 size:=GetModuleFileName(hInstance,pointer(Result),BUF_SIZE);
 SetLength(Result,size);
end;


Это сообщение отредактировал(а) Fantasist - 14.1.2005, 19:36


--------------------
Волны гасят ветер...
PM MAIL   Вверх
Гость_vitek
Дата 15.1.2005, 15:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Работает! Огромное спасибо Fantasist и всем кто принимал участие в обсуждении.
Последний вопрос: если клиент и сервер стоят на разных машинах, то выведет ли эта функция полное UNC имя? (хотя, наверное, нет)
  Вверх
Fantasist
Дата 15.1.2005, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
то выведет ли эта функция полное UNC имя


Нет конечно. Хендл модуля не будет валидным на другом компьютере - это же очевидно.



--------------------
Волны гасят ветер...
PM MAIL   Вверх
Гость_vitek
Дата 16.1.2005, 10:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Еще раз спасибо.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1215 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.