![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, какие библиотеки (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 имя-проги