AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pfad prüfen - 32/64bit DLL

Ein Thema von Alex_ITA01 · begonnen am 7. Mai 2018 · letzter Beitrag vom 9. Mai 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Pfad prüfen - 32/64bit DLL

  Alt 7. Mai 2018, 18:36
Hats geklappt?

edit
Vielleicht wäre es Sinnvoller seine Dlls umzubenennen um es dann vom OSVersion 32/64 abhängig zu machen?
Also xyz32.dll und xyz64.dll, beide in ein Verzeichnis, und per OS Abfrage die entsprechende laden lassen und später auch wieder freigeben, die Eigentlichen dll calls sollten ja gleich sein.
Ps: Bei dieser Methode, so glaube ich, sollte auch so etwas möglich sein - pseudo code
Delphi-Quellcode:
//da wo code initialisiert wird so etwas einfügen
if osversion = 64bit then {$define x64} else {$define x32}

//überall wo benötigt über ifdefs gehen, so in etwa
{$ifdef x32}
// 32bit code hier einfügen
{$endif}
{$ifdef x64}
// 64bit code hier einfügen
{$endif}
edit
nicht osversion, sowas hier meinte ich
Delphi-Quellcode:
class function TOSInfo.IsWOW64: Boolean;
type
  TIsWow64Process = function( // Type of IsWow64Process API fn
    Handle: THandle;
    var Res: BOOL
  ): BOOL; stdcall;
var
  IsWow64Result: BOOL; // result from IsWow64Process
  IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
begin
  // Try to load required function from kernel32
  IsWow64Process := GetProcAddress(
    GetModuleHandle('kernel32'), 'IsWow64Process'
  );
  if Assigned(IsWow64Process) then
  begin
    // Function is implemented: call it
    if not IsWow64Process(GetCurrentProcess, IsWow64Result) then
      raise Exception.Create('Bad process handle');
    // Return result of function
    Result := IsWow64Result;
  end
  else
    // Function not implemented: can't be running on Wow64
    Result := False;
end;
damit ermitteln ob man im 64bit modus ist und dementsprechend die {$Define} parameter setzen.
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 7. Mai 2018 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#2

AW: Pfad prüfen - 32/64bit DLL

  Alt 7. Mai 2018, 20:01
Danke, das hilft. Teste ich morgen früh gleich mal.

Ich hätte es mit der StringList so gelöst:

Delphi-Quellcode:
  sl := TStringlist.Create;
  try
    sl.Delimiter := ';';
    sl.StrictDelimiter := True;
    sl.DelimitedText := GetEnvironmentVariable('Path');

    for I := 0 to sl.Count -1 do
    begin
      //Pfad prüfen
    end;
  finally
    sl.clear;
    FreeAndNIL(SL);
  end;
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai
Online

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#3

AW: Pfad prüfen - 32/64bit DLL

  Alt 7. Mai 2018, 22:52
Ähm, es gibt auch MSDN-Library durchsuchenPathFindOnPath, das die ganze Arbeit erledigt, die Verzeichnisse des %PATH% zu durchsuchen. Name der DLL übergeben und Rückgabe (bzw. den ersten Parameter) auswerten. Meine Wrapper-Funktion dafür:
Delphi-Quellcode:
function _PathFindOnPath(const AFile: string): string;
var LFile: array[0..MAX_PATH] of Char;
begin
    Result:= AFile;
    FillChar(LFile, SizeOf(LFile), #0);
    StrLCopy(LFile, PChar(AFile), MAX_PATH);
    if PathFindOnPath(LFile, nil) then
        Result:= StrPas(LFile);
end;
Grüße
Dalai
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#4

AW: Pfad prüfen - 32/64bit DLL

  Alt 8. Mai 2018, 06:39
Danke Dalai, kannte ich auch noch nicht
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Pfad prüfen - 32/64bit DLL

  Alt 8. Mai 2018, 07:04
DLLs im System32-Verzeichnis halte ich für eine ganz schlechte Idee, spätestens wenn verschiedene Programmversionen verschiedene DLL-Versionen benötigen, fliegt einem das um die Ohren.

DLLs irgendwo im Pfad abzulegen sollte man eigentlich auch nicht mehr machen, bietet das doch einen guten Angriffsvektor für DLL injection, denn der Pfad aus dem Environment liegt an allerletzter Stelle, an der Windows schaut. Da würde ich das Konzept überdenken

Siehe auch SafeDllSearchMode. Wenn man die DLLs nicht im Programmverzeichnis ablegen kann, weil 32- und 64-bit Executables dort liegen, kann man auf SetDllDirectory zurückgreifen.
  Mit Zitat antworten Zitat
Alex_ITA01

Registriert seit: 22. Sep 2003
1.134 Beiträge
 
Delphi 12 Athens
 
#6

AW: Pfad prüfen - 32/64bit DLL

  Alt 8. Mai 2018, 07:36
Den Pfad der DLLs kann ich nicht ändern, diese werden durch eine Fremdanbieter-Software installiert und liegen da wo sie liegen.
Es wird nur entsprechend die %PATH% Variable durch die Fremdanbieter-Software angepasst, sodass ich bei 32 und 64bit jeweils die richtige DLL finde.
Let's fetz sprach der Frosch und sprang in den Mixer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.556 Beiträge
 
Delphi 12 Athens
 
#7

AW: Pfad prüfen - 32/64bit DLL

  Alt 8. Mai 2018, 11:30
spätestens wenn verschiedene Programmversionen verschiedene DLL-Versionen benötigen, fliegt einem das um die Ohren.
Dafür gibt es das Side-by-Side-Zeugs im Application Manifest, wo man angeben kann welche Version das Programm verwenden soll.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Pfad prüfen - 32/64bit DLL

  Alt 9. Mai 2018, 06:28
spätestens wenn verschiedene Programmversionen verschiedene DLL-Versionen benötigen, fliegt einem das um die Ohren.
Dafür gibt es das Side-by-Side-Zeugs im Application Manifest, wo man angeben kann welche Version das Programm verwenden soll.
Hier geht es aber um dynamisches Laden der DLL, kein statisches linken

(ich muss aber zugeben, dass ich mich mit SxS bisher zuwenig beschäftigt habe... typische Windows-Ordner-DLLs wären ja z.B. die OpenSSL-DLLs... wo gleichzeitig aber Updates essentiell sind... kann das als "abhängig von Version x.y.z.* oder höher" definiert werden? Und was hat das genau mit dem System32-Ordner zu tun, SxS-Dateien liegen doch separat?)

Geändert von CCRDude ( 9. Mai 2018 um 06:37 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz