Honnan tudom, hogy mely könyvtárak (DLL) a program által használt

Honnan tudom, hogy milyen könyvtárakat (dll) a program által használt?

Írt egy programot a számítógépen működik, hozta a számítógépen, ahol a Delphi nem, és soha nem állt, próbál futtatni, egy üzenet jelenik meg, hogy tart egy ilyen könyvtár. A kapcsolat a kérdés, hanem az egész két:







1) Van bármilyen módon lefordítani a kódot ezen könyvtárak össze a fő prog, azaz ezek dll-ki nem volt szüksége

2) Ha nem, hogyan tudod, amelyeket a könyvtárak szükségessé a program terjeszteni őket együtt egy programot?


> Ha nem, hogyan tudod, melyik könyvtárakat lehet szükség
> A program, terjeszteni őket, együtt egy programot?

Funkció GetAllProcesses2: Boolean;
Típus
TEnumProcessModules = Funkció (hProcess: THandle; lphModule: LPDWORD; CB: DWORD; Var lpcbNeeded: DWORD): BOOL Stdcall;
TGetModuleFileNameExA = Funkció (hProcess: THandle; HMODULE: HMODULE; lpFileName: PAnsiChar; nMéret: DWORD): DWORD Stdcall;
var
EnumProcessModules. TEnumProcessModules;
GetModuleFileNameExA: TGetModuleFileNameExA;
hPSAPI. THandle;
Counter1. LongWord;
pbNeeded. DWORD;
ModHndls. Array [0..1023] DWORD;
mbNeeded. DWORD;
ModulePath. string;
kezdődik
Eredmény: = false;
hPSAPI: = LoadLibrary ( "PSAPI.dll");
Ha hPSAPI <32 Then
# XA0; Begin
# XA0; # XA0; Eredmény: = false;
# XA0; # XA0; kilépés;
# XA0; End;
EnumProcessModules: = GetProcAddress (hPSAPI, "EnumProcessModules");
GetModuleFileNameExA: = GetProcAddress (hPSAPI, "GetModuleFileNameExA");
Ha EnumProcessModules (GetCurrentProcess, @ModHndls, Hosszúság (ModHndls) mbNeeded)






# XA0; majd Counter1: = 0 A (mbNeeded Div 4) - 1 Do
# XA0; # XA0; # XA0; # XA0; kezdődik
# 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; végén;
FreeLibrary (hPSAPI);
Vége;

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; GetAllProcesses2;
végén;

Kipróbált tdump a -em paraméter fogyasztott egy listát, amely - megjegyzés - nem rendelkezik a dll, ennek hiányában, amelyek megesküdött tengely (dforrt.dll). Ie megbízhatatlan módszer.

Megpróbálok egy program Rouse.

Futunk a program keretében a környezet, gyerünk töréspont, mászni a Nézet menü -, és valahol egy elemet talál, amely megmutatja egy listát a statikusan terhelt DLL. A letölthető kezeli már tudjuk.

Ez a probléma nem megoldás.


> Írjunk programot a számítógépen jól működik, hozta
> A számítógépen, ahol a Delphi nem, és soha nem állt


> Egyik dll, amelynek hiánya megesküdött tengely (dforrt.
> Dll).

A DLL Delphi nem vonatkozik

Van egy gyanú, hogy a dll is használják néhány saját dll célokra.

Igen, ez az. tdump dll-ki azt mutatta, hogy fellebbez a leginkább dforrt.dll. És bizonyos msvcrt.dll:
IMPORT: # XA0; # XA0; # XA0; Msvcrt.dll =. "Malloc"
IMPORT: # XA0; # XA0; # XA0; Msvcrt.dll =. "_ Adjust_fdiv"
IMPORT: # XA0; # XA0; # XA0; Msvcrt.dll =. "_ Initterm"
IMPORT: # XA0; # XA0; # XA0; Msvcrt.dll =. A "szabad"
Ez természetes vindovskaya vagy még néhány maradt?


> Ez a natív vindovskaya vagy még néhány maradt?

Rokonságot ez a modul a „Windows” ugyanazon törzs a kapcsolatot Delphi alkalmazások mozhulem rtlXX.bpl

Tehát ez a natív Windows, vagy nem? Vagy szintén vizhl stúdióban?

Ez nem natív Windows, és azokat az alkatrészeket, hívtuk elő MSVC (VC - ez nem VisualStudio és VisualC)

Bal - Microsoft VC RunTime

Ie Ez nem mindenhol, és azt is meg kell tartalmazza a készlet dforrt.dll ekzishnikom?

Ne.
A modul szállítjuk tisztán a disztribúciós csomagban, enélkül nem lehet a munka egy nagy halom névlegesen jön a szoftver fut.


> Ez a natív vindovskaya vagy még néhány maradt?




Kapcsolódó cikkek