Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

dll и основная программа [D5, Win95/98, Win2k]


Hamlet ©   (2002-08-23 09:56:00) 

маленький вопрос - как внутри dll получить путь к вызывающему ее приложению?
через передачу параметров не предлагать :)))


Ekaterina   (2002-08-23 11:07:00) [1]

Можно и без exports, это только для примера. В любом месте внутри dll этот код будет работать. С разными приложениями тоже будет работать, так как каждого процесса, используещего dll обшим будет только код DLL, НО НЕ ДАННЫЕ! Все данные отображённой в некоторый процесс DLL инициализируются заново. И переменная Аррlication в том числе.


Yuri-7   (2002-08-23 10:56:00) [2]

Зачем тогда функция exports и как все-таки быть с разными приложениями, работающими с одним dll?


Ekaterina   (2002-08-23 10:50:00) [3]

Требовалось-то узнать не из приложения, а внутриdll.


Yuri-7   (2002-08-23 10:45:00) [4]

>>Hamlet & Ekaterina
Ну и получилась полная чушь. Функцию Test надо будет вызывать из приложения, имя которого можно узнать и без этой функции и dll.


Yuri-7   (2002-08-23 10:40:00) [5]

Без передачи параметров - никак. Ведь с DLL может одновременно работать несколько приложений, и какой, в этом случае HOST ты захочешь узнать?


Hamlet   (2002-08-23 10:38:00) [6]

%() виноват...
я-то пробовал, только ошибка в другом месте была, а выскакивала тут...
все работает, сейчас ту ошибку поймал - теперь и здесь работает
еще раз приношу извинения


Ekaterina   (2002-08-23 10:32:00) [7]

Попробуй, а потом говори


Hamlet   (2002-08-23 10:30:00) [8]

2Ekaterina - а ты сама пробовала? не работает ведь


Ekaterina   (2002-08-23 10:25:00) [9]

library Project2;
uses
SysUtils,
Classes,
Forms,
Dialogs;

{$R *.res}

procedure Test;
begin
ShowMessage(Application.ExeName);
end;

exports
Test;

begin
end.


Ученик   (2002-08-23 10:22:00) [10]

function GetProgramFileName(Module : HModule = 0) : string;
var
szModuleName : array[0..MAX_PATH] of Char;
begin
if GetModuleFileName(Module, szModuleName, MAX_PATH) > 0 then
Result := StrPas(szModuleName)
else
Result := ""
end;


Reindeer Moss Eater   (2002-08-23 10:20:00) [11]

Paramstr(0)


Hamlet   (2002-08-23 10:18:00) [12]

2Ekaterina - еще раз повторяю - путь необходимо получить ВНУТРИ dll.... соответственно, никакого объекта Application в ней нет... иначе было бы просто слишком


Ekaterina   (2002-08-23 10:16:00) [13]

Application.ExeName


Hamlet   (2002-08-23 10:12:00) [14]

уточнение - неизвестно имя запускающей программы... соответственно, GetModuleFileName, imho, не подходит


Digitman   (2002-08-23 10:08:00) [15]

см. Win32API GetModuleHandle(), GetModuleFileName()


Наверх

Титульная страница Поиск, карта сайта Написать письмо