ПредишенСледващото

Как мога да разбера кой библиотеки (DLL), използван от програмата?

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

1) Има ли някакъв начин да се съберат всички на кода на тези библиотеки, събрани в главната прог, т.е. тези DLL-ки не се нуждаеше

2) Ако не, как да се знае кои библиотеки могат да изискват от програмата, за да ги разпространява заедно с програма?


> Ако не, как да се знае кои библиотеки могат да изискват
> Програмата, за да ги разпространява, заедно с програма?

Функционални GetAllProcesses2: Булева;
тип
TEnumProcessModules = функция (hProcess: THandle; lphModule: LPDWORD; вб: DWORD; Var lpcbNeeded: DWORD): BOOL Stdcall;
TGetModuleFileNameExA = функция (hProcess: THandle; HMODULE: HMODULE; lpFileName: PAnsiChar; nРазмер:: DWORD): DWORD Stdcall;
Var
EnumProcessModules. TEnumProcessModules;
GetModuleFileNameExA: TGetModuleFileNameExA;
hPSAPI. THandle;
Counter1. LongWord;
pbNeeded. DWORD;
ModHndls. Array [0..1023] От DWORD;
mbNeeded. DWORD;
ModulePath. String;
започвам
Резултат: = False;
hPSAPI: = LoadLibrary ( "PSAPI.dll");
Ако hPSAPI <32 Then
# XA0; Започнете
# XA0; # XA0; Резултат: = False;
# XA0; # XA0; Exit;
# XA0; End;
EnumProcessModules: = GetProcAddress (hPSAPI "EnumProcessModules");
GetModuleFileNameExA: = GetProcAddress (hPSAPI "GetModuleFileNameExA");
Ако EnumProcessModules (GetCurrentProcess, @ModHndls, дължина (ModHndls), mbNeeded)
# XA0; след това Counter1: = 0 до (mbNeeded Div 4) - 1 Do
# XA0; # XA0; # XA0; # XA0; започвам
# XA0; # XA0; # XA0; # XA0; # XA0; SetLength (ModulePath, MAX_PATH);
# XA0; # XA0; # XA0; # XA0; # XA0; GetModuleFileNameExA (GetCurrentProcess, ModHndls [Counter1] PChar (ModulePath), MAX_PATH);
# XA0; # XA0; # XA0; # XA0; # XA0; Form1.memo1.Lines.add (ModulePath);
# XA0; # XA0; # XA0; # XA0; приключи;
FreeLibrary (hPSAPI);
Край;

процедура TForm1.Button1Click (Sender: TObject);
започвам
# XA0; GetAllProcesses2;
приключи;

Опитах TDUMP с -em параметър, е консумирал списък от които - бел - не разполагат с DLL, при липсата на които се закле ос (dforrt.dll). Т.е. ненадежден метод.

Ще се опитам програма от Русе.

В момента тече програмата в рамките на околната среда, хайде Breakpoint, се изкачи в менюто Изглед - и някъде намери позиция, която показва списък на статично натоварени DLL. А за сваляне дръжки, което вече знаем.

Този проблем няма решение.


> Да се ​​напише програма на компютъра ми работи добре, предявен
> На компютър, където Delphi не е и никога не стоеше


> Никой от DLL, липсата на което закле ос (dforrt.
> Dll).

този DLL до Делфи не се прилага

Има подозрения, че DLL се използва също и някои от неговите DLL употреби.

Да, така е. TDUMP DLL-ки е показал, че се обръща към най-dforrt.dll. И до известна Msvcrt.dll:
ВНОС: # XA0; # XA0; # XA0; Msvcrt.dll =. "Изчистване"
ВНОС: # XA0; # XA0; # XA0; Msvcrt.dll =. "_ Adjust_fdiv"
ВНОС: # XA0; # XA0; # XA0; Msvcrt.dll =. "_ Initterm"
ВНОС: # XA0; # XA0; # XA0; Msvcrt.dll =. "Свободен"
Това родния vindovskaya или също да остане нещо?


> Това родния vindovskaya или също да остане нещо?

Родството с този модул на "Windows" на едно и също племе като отношенията Delphi приложения с mozhulem rtlXX.bpl

Така че е роден в Windows, или не? Или също от vizhl студио?

Той не е роден в Windows, така и за тези компоненти, които са разработени с помощта на MSVC (VC - това не е VisualStudio и VisualC)

Ляво - MicroSoft VC Времетраене

Т.е. Това не е навсякъде, и това също трябва да бъдат включени в комплекта, за да dforrt.dll ekzishnikom?

не го правят.
Модулът се доставя чисто в пакета за разпространение, без това не може да бъде работата на огромна купчина номинално идва с приложен софтуер работещ.


> Това родния vindovskaya или също да остане нещо?

Свързани статии

Подкрепете проекта - споделете линка, благодаря!