AGB  ·  Datenschutz  ·  Impressum  







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

32 oder 64 Bit dll einbinden

Ein Thema von willyxv · begonnen am 1. Aug 2012 · letzter Beitrag vom 1. Aug 2012
Antwort Antwort
willyxv

Registriert seit: 25. Okt 2010
29 Beiträge
 
Delphi XE Enterprise
 
#1

32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 17:07
Hallo,

folgenden Problem. Ich habe ein Programm, welches Daten eine Geräts ausliest und anschließend mit Zeos in eine PostgreSQL Datenbank speichert. Um dies zu tun wird die libpq.dll benötigt welche es in 2 Versionen gibt, eine für 32 und eine für 64 Bit. Die Datei muss im selben Verzeichniss liegen wie die EXE.

Da ich das Program von einem USB Stick auf verschiedesten Rechnern ausführe und nicht jedes mal erst nachschauen will, ob ein 32 oder 64 Bit System drauf installiert ist um die entsprechenden dll ins Verzeichniss zu kopieren.

Gibt es eine möglichkeit die dll auch in einen unterordner zu verschieben und dann nur den pfad dorthin anzugeben? So dass man am anfang des Programmes einfach die Betriebssystemversion bestimmt und und dann sagt wenn 32 bit schau da oder wenn 64 bit dann schau hier nach.

MfG Willy
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: 32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 17:12
Hallo,

sollte die DLL Version denn nicht vom dem Programm abhängen welche sie einbindet.
Da Du XE hast - kann es eigentlich nur die 32BitVersion sein.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: 32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 17:14
Du willst die DLL in deinem Programm laden?

Wenn ja, dann kannst du mit XE sowieso nur eine 32 Bit-Anwendung erstellen und somit auch nur die 32 Bit-DLL laden.

Selbst mit XE2 braucht man nicht zur Laufzeit nachsehn, ob 32 oder 64 Bit, denn es kann eine EXE jeweils nur als 32 oder 64 Bit erstellt werden und demnach kann es auch immer nur eine der beiden DLLs laden (32 Bit-EXE + 32 Bit+DLL oder 64 Bit-EXE + 64 Bit+DLL), egal wo man diese EXE startet.



Wenn man die DLL dynamisch läd, dann kann man dem LoadLibrary auch gerne einen vollständigen Pfad mitgeben, anstatt nur den Dateinamen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
willyxv

Registriert seit: 25. Okt 2010
29 Beiträge
 
Delphi XE Enterprise
 
#4

AW: 32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 17:24
Hi,

also nicht ich will sie laden sondern die zeos-lib benötigt sie für die postgre-sql verbindung und hier gibt es unterschiedliche dll für 64 und 32 bit systeme. Das programm läuft Problemlos nur je nach Betriebssystem muss ich die eine dll im Verzeichniss haben oder die andere. Laden ins Programm muss ich sie nicht nur im verzeichniss muss sie sein, alternativ kann sie auch schon im System installiert sein (in diesem fall muss sie nicht im exe Verzeichniss sein), das ist aber bei den wenigsten laptops der fall und da die ständig wechseln lohnt es sich auch nicht sie auf jedem einzelnen zu installieren.

MfG Willy
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: 32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 17:46
Die zu verwendene Dll hängt nicht vom BS, sondern von der Anwendung ab (32Bit-Anwendung 32Bit-Dll; 64Bit-Anwendung 64-Bit Dll)
Markus Kinzler
  Mit Zitat antworten Zitat
willyxv

Registriert seit: 25. Okt 2010
29 Beiträge
 
Delphi XE Enterprise
 
#6

AW: 32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 18:17
hi,

also es ist eine 32bit anwendung, wen ich sie auf einem 32 bit system ausführe funktioniert sie ohne probleme. Möchte ich sie auf einem 64 bit system ausführen kommt eine Fehlermeldung. Tausche ich nun auf dem 64 Bit system die libpq.dll aus, funktioniert das programm auch auf dem 64 bit system, jedoch nicht mehr unter dem 32 bit system.

Es gibt also 2 libpq.dlls eine funktioniert mit meinem programm nur unter 32 bit systemen die andere nur unter 64 bit systemem.

Im moment tausche ich die Datei (libpq.dll) aus je nach system, das programm bleibt das selbe, nur die dll wird getauscht.

MfG Willy

Edit: Also ums noch mal genauer zu sagen, die dll ist eine system dll welche für die Verbindung zur Postgresql datenbank benötigt wird. Da diese jedoch nicht standart mäßig installiert ist muss man sie mitgeben. Aber als system dll ist sie vom system abhängig was 32/64 bit angeht.
Im endeffekt brauche ich eine möglichkeit den Suchpfad meines programmes beim start zu verändern (da er ja nur in seinem exe Verzeichniss nachschaut sofern die dll nicht installiert ist) um entsprechend des systems auf einen Ordner mit der entsprechenden libpq.dll zeigen zu können.

Geändert von willyxv ( 1. Aug 2012 um 18:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: 32 oder 64 Bit dll einbinden

  Alt 1. Aug 2012, 19:03
Wenn du selber die DLL nicht lädst (LoadLibrary), dann kannst du auch kein Verzeichnis dafür vorgeben.

Es wäre ja noch schöner/unsicherer, da man so sehr leicht "fremde" (bösartige) DLLs in fremde Prozesse einschleusen könnte.
Du kannst es höchstens mal mit einem ensprechendem Manifest und Side-by-side (WinSxS / SxS) versuchen.


Wir nutzen PgDAC und das läuft problemlos, egal ob Win32 oder Win64.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 05:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz