Cum pot afla care biblioteci (DLL) folosesc programul?
Am scris un program, funcționează în mod normal pe calculatorul meu, l-am adus pe un computer, unde dolphy nu este și nu a stat niciodată, încerc să alerg, dă un mesaj că o astfel de bibliotecă este necesară. În acest sens, întrebarea, sau mai degrabă cele două:
1) Dacă este posibil să se facă astfel încât la compilare întregul cod din astfel de biblioteci să fie compilat în programul de bază, adică astfel încât aceste dll-uri nu sunt necesare
2) Dacă nu, cum știți care biblioteci poate solicita programul pentru a le distribui cu programul?
> Dacă nu, de unde știi care ar fi nevoie de biblioteci
> să le distribuiți împreună cu programul?
Funcția GetAllProcesses2: Boolean;
tip
TEnumProcessModules = Funcție (hProcess: THandle; lphModule: LPDWORD; cb: DWORD; Var lpcbNeeded: DWORD): BOOL stdcall;
TGetModuleFileNameExA = Funcție (hProcess: THandle; HMODULE: HMODULE; lpFileName: PAnsiChar; nMărime: DWORD): DWORD stdcall;
var
EnumProcessModules. TEnumProcessModules;
GetModuleFileNameExA: TGetModuleFileNameExA;
hPSAPI. THandle;
Counter1. LongWord;
pbNeeded. DWORD;
ModHndls. Array [0..1023] din DWORD;
mbNeeded. DWORD;
ModulePath. string;
începe
Rezultat: = False;
hPSAPI: = LoadLibrary ("PSAPI.dll");
Dacă hPSAPI <32 Then
# xA0; Începeți
# xA0; # xA0; Rezultat: = False;
# xA0; # xA0; Ieșire;
# xA0; Sfârșit;
EnumProcessModules: = GetProcAddress (hPSAPI, "EnumProcessModules");
GetModuleFileNameExA: = GetProcAddress (hPSAPI, "GetModuleFileNameExA");
Dacă EnumProcessModules (GetCurrentProcess, @ModHndls, Length (ModHndls), mbNeeded)
# xA0; Apoi pentru Counter1: = 0 Pentru (mbNeeded Div 4) - 1 Nu
# xA0; # xA0; # xA0; # xA0; începe
# 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; se încheie;
FreeLibrary (hPSAPI);
End;
procedura TForm1.Button1Click (expeditor: TObject);
începe
# xA0; GetAllProcesses2;
se încheie;
tdump A încercat cu parametrul -em, a consumat o listă din care - nota - nu au dll, în absența care a jurat axa (dforrt.dll). Ie nesigură metoda.
Voi încerca un program de la Rouse.
Am rula programul în mediul, vin pe breakpoint, urca în meniul View - și undeva, găsiți un element care afișează o listă de DLL încărcate static. Un descărcabil se ocupă de noi știm deja.
Această problemă nu are nicio soluție.
> Am scris un program, pe computerul meu funcționează normal, adus
> pe un computer unde dolphy nu este și nu a stat niciodată
> Nu există nicio dll, a cărei absență a jurat axa (dforrt.
> dll).
acest DLL către Delphi nu se aplică
Există o suspiciune că dll-ul folosit folosește și unul din propriile sale.
Da, este. tdump dll-ki a arătat că se referă la acest foarte dforrt.dll. Și, de asemenea, la unele 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 = "Free"
Acesta este Windows nativ sau este un fel de stânga?
> Aceasta este Windows nativ sau este un fel de stânga?
Înrudire cu acest modul la „Windows“ din același trib ca aplicațiile Delphi în relația cu mozhulem rtlXX.bpl
Deci este nativ la Windows sau nu? Sau de asemenea din studio?
este nativ nu pentru Windows, ci pentru cele ale componentelor sale care au fost dezvoltate folosind MSVC (VC nu este VisualStudio, ci VisualC)
MicroSoft VC RunTime
Ie nu este peste tot și ar trebui să fie inclus și cu dforrt.dll ca un pachet cu un fragment?
Nu.
Modulul este livrat ca parte a distribuției, fără a fi imposibil să lucreze o grămadă mare de software, care este furnizat ca parte a sistemului de operare.
> Aceasta este Windows nativ sau este un fel de stânga?