08. september 2004 - 13:19
Der er
4 kommentarer og
2 løsninger
Genkendelse af DLL filer
Jeg har en række filer i en mappe! Spørgsmålet er, hvordan jeg kan vide om en tilfældig fil er en DLL-fil eller ej! (Vel og mærket uden at skulle kigge på filens efternavn)!
Hvis jeg bruger funktionen LoadLibrary() opstår en fejl meddelse, meget naturligt, når filen ikke er en DLL-fil! Denne fejlmeddelse vil jeg gerne ungå og tænkte at man selv kunne checke om en fil er af typen DLL eller ej!
08. september 2004 - 13:25
#1
Du kunne jo evt. smide din LoadLibrary ind i en Try / Except. Så undgår du at brugerne får vist en "grim" fejl :)
Try
LoadLibrary();
//Kommer vi hertil er det en DLL fil
Except
//Kommer vi hertil er det IKKE en DLL fil eller der er sket en anden fejl
End;
08. september 2004 - 14:20
#4
LoadLibrary Retunerer 0 hvis det enten ikke er en DLL fil eller ikke er mulig at loade den .. Se etv MSDN
Ellers kig lidt på det her, det burde kunne indspirere dig til noget :
Type
TExetype = ( etUnknown, etDOS, etWinNE, etWinPE );
TExeStrings = Array [TExetype] of String[30];
const
ExeStrings : TExeStrings =
('Unknown file type',
'Dos executable',
'Windows 16 bit executable',
'Windows 32 bit executable'
);
Function GetExetype( Const fname: String ): TExetype;
Var
Signature: Word;
WinHdrOffset: Word;
Fexe: TFileStream;
Begin
result := etUnknown;
Fexe := TFileStream.Create( fname, fmOpenRead or fmShareDenyNone);
Fexe.ReadBuffer( signature, Sizeof(signature));
If signature = $5A4D { 'MZ' } Then
begin
result := etDOS;
Fexe.Seek( $18, soFromBeginning );
Fexe.ReadBuffer( WinHdrOffset, Sizeof(WinHdrOffset));
If WinHdrOffset >= $40 Then
begin
Fexe.Seek( $3C, soFromBeginning );
Fexe.ReadBuffer( WinHdrOffset, Sizeof(WinHdrOffset));
Fexe.Seek( WinHdrOffset, soFrombeginning );
Fexe.ReadBuffer( signature, Sizeof(signature));
If Signature = $454E { 'NE' } Then
Result := etWinNE
else
If signature = $4550 { 'PE' } Then
Result := etWinPE;
end; { If }
end; { If }
Fexe.Free;
End;
Jens B