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

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

Как узнать, какие библиотеки (dll) использует программа?


Franzy ©   (2009-04-21 17:42:00) 

Написал прогу, на моем компе нормально работает, принес на комп, где дельфи нет и никогда не стояло, пробую запустить, выдает сообщение, что требуется такая-то библиотека. В связи с чем вопрос, а точнее целых два:

1) Можно ли сделать так, чтобы при компиляции весь код из таких библиотек компилировался в основную прогу, т.е. чтобы эти длл-ки не требовались

2) Если нет, то как узнать, какие библиотеки может потребовать прога, чтобы распространять их вместе с прогой?


Игорь Шевченко   (2009-04-23 18:46:00) [1]


> Это родная виндовская или тоже какая-то левая?


родная


DVM   (2009-04-23 15:29:00) [2]


> Сергей М. ©   (23.04.09 15:22) [17]
>
> Не надо.

Не факт кстати. Плюс у нее версии разные еще есть.


> Franzy   (23.04.09 15:17) [16]
>
> Т.е. она есть не везде и ее тоже надо включать вместе с
> dforrt.dll в комплект с экзишником?

Если нужна MSVCRT.dll, то разумнее в процессе установки программы поставить еще м Microsoft Visual C++ 2008 Redistributable, ну или другой версии.


Сергей М.   (2009-04-23 15:22:00) [3]

Не надо.
Модуль поставляется штатно в составе дистрибутива, без него невозможна работа огромной кучи штатно поставляемого в составе ОС прикладного софта.


Franzy   (2009-04-23 15:17:00) [4]

Т.е. она есть не везде и ее тоже надо включать вместе с dforrt.dll в комплект с экзишником?


DVM   (2009-04-23 15:07:00) [5]

Dependency Walker


Anatoly Podgoretsky   (2009-04-23 15:05:00) [6]

> Franzy  (23.04.2009 13:38:09)  [9]

Левая - MicroSoft VC RunTime


Сергей М.   (2009-04-23 14:46:00) [7]

она родная не для винды, а для тех ее компонентов, которые разрабатывались с использованием MSVC (VC - это не VisualStudio, а Visual C)


Franzy   (2009-04-23 14:02:00) [8]

Так она родная для винды или нет? Или тоже из вижл студио?


Сергей М.   (2009-04-23 13:45:00) [9]

Родство с этим модулем у "винды" того же колена, что и родство Делфи-приложений с можулем rtlXX.bpl


Сергей М.   (2009-04-23 13:43:00) [10]


> Это родная виндовская или тоже какая-то левая?


Micro Soft Visual C Run- Time library


Franzy   (2009-04-23 13:38:00) [11]

Да, так и есть. tdump длл-ки показал, что она обращается к этой самой dforrt.dll. А еще к какой-то MSVCRT.dll:
IMPORT:       MSVCRT.dll={hint:0291h}.'malloc'
IMPORT:       MSVCRT.dll={hint:009Dh}.'_adjust_fdiv'
IMPORT:       MSVCRT.dll={hint:010Fh}.'_initterm'
IMPORT:       MSVCRT.dll={hint:025Eh}.'free'
Это родная виндовская или тоже какая-то левая?


Franzy   (2009-04-23 12:35:00) [12]

Есть подозрение, что используемая длл тоже какие-то свои длл использует...


Игорь Шевченко   (2009-04-22 21:48:00) [13]


> Написал прогу, на моем компе нормально работает, принес
> на комп, где дельфи нет и никогда не стояло


> НЕТ той длл, на отсутствие которой ругалась ось (dforrt.
> dll).


эта DLL к Delphi не относится


Anatoly Podgoretsky   (2009-04-22 14:13:00) [14]

> Franzy  (22.04.2009 13:51:04)  [4]

Данная задача решения не имеет.


Юрий Зотов   (2009-04-22 14:01:00) [15]

Запускаем программу под средой, приходим на BreakPoint, лезем в меню View - и где-то там видим пункт, который показывает список статически загруженных DLL. А загружаемые ручками мы и так знаем.


Franzy   (2009-04-22 13:51:00) [16]

Попробовал tdump с параметром -em, выело список в котором - внимание - НЕТ той длл, на отсутствие которой ругалась ось (dforrt.dll). Т.е. метод ненадежный.

Попробую прогу от Rouse.


Rouse_   (2009-04-22 11:53:00) [17]

Вот это поставь - все покажет :)
http://rouse.drkb.ru/winapi.php#propsheet


12   (2009-04-22 10:33:00) [18]

Function GetAllProcesses2: Boolean;
Type
TEnumProcessModules = Function (hProcess: THandle; lphModule: LPDWORD; cb: DWORD; Var lpcbNeeded: DWORD): BOOL Stdcall;
TGetModuleFileNameExA = Function (hProcess: THandle; HMODULE: HMODULE; lpFileName: PAnsiChar; nSize: DWORD): DWORD Stdcall;
Var
EnumProcessModules : TEnumProcessModules;
GetModuleFileNameExA: TGetModuleFileNameExA;
hPSAPI : THandle;
Counter1 : LongWord;
pbNeeded : DWORD;
ModHndls : Array[0..1023] Of DWORD;
mbNeeded : DWORD;
ModulePath : String;
Begin
Result := False;
hPSAPI := LoadLibrary('PSAPI.dll');
If hPSAPI < 32 Then
 Begin
   Result := False;
   Exit;
 End;
EnumProcessModules := GetProcAddress(hPSAPI, 'EnumProcessModules');
GetModuleFileNameExA := GetProcAddress(hPSAPI, 'GetModuleFileNameExA');
If EnumProcessModules(GetCurrentProcess, @ModHndls, Length(ModHndls), mbNeeded)
 Then For Counter1 := 0 To (mbNeeded Div 4) - 1 Do
        Begin
          SetLength(ModulePath, MAX_PATH);
          GetModuleFileNameExA(GetCurrentProcess, ModHndls[Counter1], PChar(ModulePath), MAX_PATH);
          Form1.memo1.Lines.add(ModulePath);
        end;
FreeLibrary(hPSAPI);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetAllProcesses2;
end;


Игорь Шевченко   (2009-04-21 18:14:00) [19]


> Если нет, то как узнать, какие библиотеки может потребовать
> прога, чтобы распространять их вместе с прогой?


tdump имя-проги


Наверх

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