Einzelnen Beitrag anzeigen

ringli

Registriert seit: 7. Okt 2004
510 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Ist Anwendung 32 oder 64 Bit

  Alt 19. Mär 2012, 19:04
Ich werfe mal diese Funktion in den (virtuellen) Raum:
Delphi-Quellcode:
const
  SCS_32BIT_BINARY = 0;
  SCS_64BIT_BINARY = 6;
  SCS_DOS_BINARY = 1;
  SCS_OS216_BINARY = 5;
  SCS_PIF_BINARY = 3;
  SCS_POSIX_BINARY = 4;
  SCS_WOW_BINARY = 2;

  KERNEL32_DLL = 'kernel32.dll';

  // Typ eines Binaries erkennen
  // DYNAMISCHER FUNKTIONSIMPORT !!!
type
  TGetBinaryType = function (lpApplicationName: PWideChar; out lpBinaryType: DWORD): Boolean; stdcall;

function GetBinaryType(lpApplicationName: PWideChar; out lpBinaryType: DWORD): Boolean;
var
  DLL_Handle : THandle; // für dynamischen Funktionsimport!
  DLL_GetBinaryType : TGetBinaryType; // für dynamischen Funktionsimport!
begin
  // Handle für die KERNEL32.DLL erhalten
  DLL_Handle := LoadLibraryW(PWideChar(KERNEL32_DLL));
  // Wenn Handle vorhanden, Adressen der Funktionen ermitteln
  if DLL_Handle <> 0 then
    begin
      try
        @DLL_GetBinaryType := GetProcAddress(DLL_Handle, 'GetBinaryTypeW');
        // Wurde GetBinaryTypeW in der DLL gefunden?
        if @DLL_GetBinaryType <> nil then
          begin
            Result := DLL_GetBinaryType(lpApplicationName, lpBinaryType);
          end
        else
          begin
            RaiseLastOSError;
            Result := False;
          end;
      finally
        FreeLibrary(DLL_Handle);
      end;
    end
  else
    begin
      RaiseLastOSError;
      Result := False;
    end;
end;
Das dürfte der offizielle Weg sein. Optimierungspotenzial nicht ausgeschlossen.
  Mit Zitat antworten Zitat