Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL-Funktionen in ner andderen DLL (https://www.delphipraxis.net/42998-dll-funktionen-ner-andderen-dll.html)

CrashXY 27. Mär 2005 11:44


DLL-Funktionen in ner andderen DLL
 
So, ich hab folgendes Problem:

Ich habe eine DLL die Funktionen bereitstellt (ich kenn nur den Namen der Funktionen, nicht die Parameter, da liegt auch ein Problem...)

Nun hab ich eine DLL geschrieben und sie praktisch durchlenken lassen. Ein Prog ruft statt der orginal DLL meien DLL auf und ich 'leite' dann alles weiter da ich alle funktionen per:

Delphi-Quellcode:
procedure xxx; external 'xxx.dll';
Eingebunden und über export freigelegt habe, nun meine Frage:
Wie kann ich nur mit der DLL Datei und dem NAmen der Funktion ihre Parameter abfragen und dann wie kann ich die Weitergabe beienflussen, also mit override, das geht nicht...

jbg 27. Mär 2005 12:19

Re: DLL-Funktionen in ner andderen DLL
 
Zitat:

Zitat von CrashXY
Wie kann ich nur mit der DLL Datei und dem NAmen der Funktion ihre Parameter abfragen

Indem du dir die Header-Dateien anschaust/beschaffst.

Zitat:

und dann wie kann ich die Weitergabe beienflussen, also mit override, das geht nicht...
override ist für Methoden einer Klasse und nicht für Funktionen und Prozeduren. Wenn du die Parameter hast, kannst du doch die original Funktion aus deiner aufrufen. Du musst der original Fkt. nur einen anderen import-Namen geben.
procedure yyy; external 'xxx.dll' name 'xxx';

c113plpbr 27. Mär 2005 12:26

Re: DLL-Funktionen in ner andderen DLL
 
Hallo CrashXY!

Laut deiner Beschreibung versuchst du, das was man unter DLL-Wrapping versteht zu programmieren.
Zitat:

Zitat von CrashXY
Wie kann ich nur mit der DLL Datei und dem NAmen der Funktion ihre Parameter abfragen und dann wie kann ich die Weitergabe beienflussen, also mit override, das geht nicht...

Meines Wissens nach, geht das unter Delphi nur mit den Parametern, allerdings bin ich mir da nicht ganz sicher.

Aber darf man fragen, wozu du das brauchst? Vielleicht gibt es ja andere (bessere?) Lösungen dafür ...

ciao, Philipp

Masterof 27. Mär 2005 12:33

Re: DLL-Funktionen in ner andderen DLL
 
Hallo!!

wenn du die Funktion in der DLL ansprechen willst brauchst du unter Delphi die Paramter, sonnst akzeptiert er deinen Aufruf nicht.

Master

CrashXY 27. Mär 2005 17:49

Re: DLL-Funktionen in ner andderen DLL
 
Wie ich die genau beschaffen könnte ist mir immernoch unklar. Ich habe die DLL und ein Programm das sie nutzt (kein Source der beiden!). Um an die Namen der Proceduren zu kommen hab ich die DLL-Datei mit disasm disassmebliert. Was ich jetzt habe ist der Disassemblirte Code und meine DLL die als Zwischenleitung fungiert.

Zitat:

Number of Exported Functions = 25 (decimal)

Addr:004426B8 Ord: 1 (0001h) Name: HarmonyGetVersion
Addr:004426C0 Ord: 2 (0002h) Name: HarmonyCreate
Addr:004426E4 Ord: 3 (0003h) Name: HarmonyRelease
Addr:00442708 Ord: 4 (0004h) Name: HarmonyInitMidi
Addr:0044272C Ord: 5 (0005h) Name: HarmonyInitWave
Addr:00442750 Ord: 6 (0006h) Name: HarmonyTermMidi
Addr:00442774 Ord: 7 (0007h) Name: HarmonyTermWave
Addr:00442798 Ord: 8 (0008h) Name: HarmonyCheckValidMidi
Addr:004427BC Ord: 9 (0009h) Name: HarmonyCheckValidWave
Addr:00442848 Ord: 10 (000Ah) Name: HarmonyFadeInMusic
Addr:00442874 Ord: 11 (000Bh) Name: HarmonyFadeOutMusic
Addr:004428A0 Ord: 12 (000Ch) Name: HarmonySetMusicVolume
Addr:004428CC Ord: 13 (000Dh) Name: HarmonySetMusicSpeed
Addr:004428F8 Ord: 14 (000Eh) Name: HarmonySetMusicPanpot
Addr:004427E0 Ord: 15 (000Fh) Name: HarmonyPlayMusic
Addr:00442924 Ord: 16 (0010h) Name: HarmonyStopMusic
Addr:00442948 Ord: 17 (0011h) Name: HarmonyGetMusicPlaying
Addr:0044296C Ord: 18 (0012h) Name: HarmonyGetMusicLooping
Addr:00442990 Ord: 19 (0013h) Name: HarmonyPlaySound
Addr:004429F8 Ord: 20 (0014h) Name: HarmonyPlaySoundEx
Addr:00442A6C Ord: 21 (0015h) Name: HarmonyStopSound
Addr:00442A90 Ord: 22 (0016h) Name: HarmonyCacheSound
Addr:00442AF8 Ord: 23 (0017h) Name: HarmonyReserveSound
Addr:00442B60 Ord: 24 (0018h) Name: HarmonyCancelSound
Addr:00442BC8 Ord: 25 (0019h) Name: HarmonyGetMidiTick
Zitat:

Sym = HarmonyGetVersion [004426B8:8 (268984)]

Sym = HarmonyCreate [004426C0:36 (268992)]

Sym = HarmonyRelease [004426E4:36 (269028)]

Sym = HarmonyInitMidi [00442708:36 (269064)]

Sym = HarmonyInitWave [0044272C:36 (269100)]

Sym = HarmonyTermMidi [00442750:36 (269136)]

Sym = HarmonyTermWave [00442774:36 (269172)]

Sym = HarmonyCheckValidMidi [00442798:36 (269208)]

Sym = HarmonyCheckValidWave [004427BC:36 (269244)]

Sym = HarmonyPlayMusic [004427E0:104 (269280)]

Sym = HarmonyFadeInMusic [00442848:44 (269384)]

Sym = HarmonyFadeOutMusic [00442874:44 (269428)]

Sym = HarmonySetMusicVolume [004428A0:44 (269472)]

Sym = HarmonySetMusicSpeed [004428CC:44 (269516)]

Sym = HarmonySetMusicPanpot [004428F8:44 (269560)]

Sym = HarmonyStopMusic [00442924:36 (269604)]

Sym = HarmonyGetMusicPlaying [00442948:36 (269640)]

Sym = HarmonyGetMusicLooping [0044296C:36 (269676)]

Sym = HarmonyPlaySound [00442990:104 (269712)]

Sym = HarmonyPlaySoundEx [004429F8:116 (269816)]

Sym = HarmonyStopSound [00442A6C:36 (269932)]

Sym = HarmonyCacheSound [00442A90:104 (269968)]

Sym = HarmonyReserveSound [00442AF8:104 (270072)]

Sym = HarmonyCancelSound [00442B60:104 (270176)]

Sym = HarmonyGetMidiTick [00442BC8:0 (270280)]
und dann natürlich noch den ASM-Code jeder Funktion:

z.B.:
Zitat:

:004426B8 B8C8000000 mov eax, 000000C8
:004426BD C3 ret

:004426BE 8BC0 mov eax, eax

SirThornberry 27. Mär 2005 17:56

Re: DLL-Funktionen in ner andderen DLL
 
So weit ich weiß ist disassemblieren fremder Programme (dll's etc.) verboten... korriegiert mich wenn das falsch ist.

c113plpbr 27. Mär 2005 19:23

Re: DLL-Funktionen in ner andderen DLL
 
Zitat:

Zitat von SirThornberry
So weit ich weiß ist disassemblieren fremder Programme (dll's etc.) verboten... korriegiert mich wenn das falsch ist.

Ich bin mir da auch nicht ganz sicher, aber meines wissens nach, ist es nur verboten, wenn du etwas veänderst. Ansonsten könnte man ja Disassembler gleich verbieten ...

Achja, mit dem richtigen Disassembler bekommt man auch meist die richtigen Parameter heraus (z.B. mit IDA, testversion sollte reichen ...)

Trotzdem würde es mich interessieren, was es dir dann nutzt, wenn du die ganzen funktionen weiterleitest?

ciao, Philipp

CrashXY 27. Mär 2005 20:29

Re: DLL-Funktionen in ner andderen DLL
 
Nein, ich will die Funktionen nicht nur weiterleiten ich will sie vorher noch beeinflöussen können...

Das sieht standart so aus:

Programm <--> DLL

Ich will es so

Programm <--> Meine DLL <--> DLL

So kann ich bestimmte Sachen im Programmablauf verändern...

Masterof 27. Mär 2005 21:40

Re: DLL-Funktionen in ner andderen DLL
 
Hallo!!

Das disassemblieren fremder Programme verboten ist dann verboten wenn es sich um kommerzielle Software handelt. Da dann der geschützte Code ausgelesen werden kann. Auf diesem Weg werden meist auch Cracks geschrieben.
Du brauchst die Parameter. Du kannst ja mal schauen ob du sie mit auslesen kannst

master

Zyancali 27. Mär 2005 21:54

Re: DLL-Funktionen in ner andderen DLL
 
Nur mal so eine frage, aber heisst die Original DLL harmony.dll und war diese im system oder system32 ordner ?
Das Programm das diese DLL benutzt, heisst dieses mit der Exename "rpg2000.exe" (vom RPG Maker 2000) ?

Wenn ja, ich kenne jemanden der die volle Funktionsliste hat.
Ob diese Person mir/dir die Liste aushändigt, hmm... ist eine andere Sache.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:38 Uhr.
Seite 1 von 2  1 2      

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