Autor Beitrag
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Do 13.12.12 22:21 
Hi!

Wie ihr (natürlich 8) ) wisst, ist MassiveUniverseOnline durch FreePascal mindestens auf Win32, Win64 und eventuell diversen *nixen verfügbar.

Da wir nun aber eine größere Anzahl externe Bibliotheken verwenden, wird das langsam echt unübersichtlich, diese immer in den passenden Ausführungen mitzuführen. Zum deployen geht das ja noch - da packt man halt einfach die richtigen ein. Aber zum Debuggen ist das einiger Aufwand, da wir auch da schon gemischt arbeiten.

Momentan habe ich das in den Headern so gelöst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  {$IFDEF Win32}
    sndfilelib='libsndfile-1_x86.dll';
  {$ENDIF}
  {$IFDEF Win64}
    sndfilelib='libsndfile-1_x64.dll';
  {$ENDIF}
  //...


Nun ist das aber Overhead und auch nicht so wirklich toll, weil eben alle DLLs im Binary-Ordner durcheinanderfliegen. Was ich schön finden würde, wäre diese Struktur:
ausblenden Nicht wirklich sinnvolle Lib-Auswahl...
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
MUO-Root
├───lib
│   ├───i386
│   │       libogg-0.dll
│   │       libsndfile-1.dll
│   │       libvorbis-0.dll
│   │       libvorbisfile-3.dll
│   │
│   └───x86_64
│           libogg-0.dll
│           libsndfile-1.dll
│           libvorbis-0.dll
│           libvorbisfile-3.dll

├───Application.exe

Und dann würde ich einfach dem Windows-DLL-Loader sagen, er möchte die Dateien bitte aus dem passenden Pfad laden. Dieser Pfad kann ja durchaus fest eincompiliert sein. Wenn man alle DLLs dynamisch linken und selber laden würde wäre das ja kein Problem, ist aber einiger Header-Konvertierungs-Aufwand.
Im Grunde suche ich sowas wie ein reincompilierbares LD_PATH=foo ;-)

Existiert sowas?


Viele Grüße,
Martok

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: Fr 14.12.12 20:21 
Hallo Martok,

es scheint ja wenige Ideen zu geben. Vielleicht ein Ansatz:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  {$IFDEF Win32}
    directory='MUA-Root\lib_x86\';
  {$ENDIF}
  {$IFDEF Win64}
    directory='MUA-Root\lib_x64\';
  {$ENDIF}
  //...
sndfilelib=directory+'libsndfile.dll';
  //...


Gruß GuaAck
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 14.12.12 21:43 
Es gibt wenige Ideen, weil es das (schon aus Sicherheitsgründen) nicht gibt. ;-)

Normalerweise ist genau dafür ein Setup da, insbesondere bei Spielen. Da werden die DLLs an den passenden Orten dann einfach registriert und damit hat sich das ganze, dann weiß Windows wo es die DLLs findet.
Das geht unter:
ausblenden Quelltext
1:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths					
Martok Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Fr 14.12.12 23:25 
Hm.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Normalerweise ist genau dafür ein Setup da, insbesondere bei Spielen.

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
zum deployen geht das ja noch - da packt man halt einfach die richtigen ein. Aber zum Debuggen ist das einiger Aufwand, da wir auch da schon gemischt arbeiten.

Geht ja grade um den nicht-deployeten Teil.
Und leider auch nicht nur eine Binary, sonst könnte man die ja einfach per Projektoptionen in ein passendes Verzeichnis werfen - in die Richtung geht das direkt in Lazarus. Betrifft aber eben auch eine Hand voll Testprogramme/Featuredemos, die wieder alle ins Hauptprojektverzeichnis werfen ist auch nix.

Nagut. Bleibt also wohl nichts anderes als eine zentrale Sammelstelle im Repo und dann Copypasta der jeweils gebrauchten DLLs ins Ausgabeverzeichnis.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 15.12.12 00:03 
Zum Debuggen kannst du doch auch an der Stelle die Einträge in die Registry setzen bzw. wieder löschen. Ich weiß nicht, ob sich das direkt auswirkt, aber ich vermute es.