Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi exportierte Prozedur aus EXE mit rundll aufrufen (https://www.delphipraxis.net/79045-exportierte-prozedur-aus-exe-mit-rundll-aufrufen.html)

diabox 15. Okt 2006 13:38


exportierte Prozedur aus EXE mit rundll aufrufen
 
Ich habe eine ganz normale Win32 Anwendung (.EXE): Aus dieser heraus exportiere ich eine kleine Testprozedur:

Delphi-Quellcode:
procedure Hallo();
begin
 ShowMessage('Hallo Welt');
end;

exports Hallo;
Diese Prozedur möchte ich jetzt gerne direkt starten, ohne dass die Anwendung etwas anderes macht, als diese Funktion auszuführen. Darum dachte ich mir, ich behandle die Anwendung wie eine DLL - also als Modul - und starte die Prozedur so:
Code:
rundll32 test.exe Hallo
Wenn die Prozedur nichts macht, gibt es auch keine Fehler, rundll32 läuft reibungslos ab.
Wenn ich die Prozedur aber mit diesem ShowMessage oder mit einer Funktion, die eine Datei erstellt bestücke, erhalte ich eine Exception von der rundll32 und zwar steht da nicht, wie sonst, wenn mein Code eine Exception verursacht hat: In dem Modul ist eine Ausnahme aufgetreten (o.ä.) sondern:
Zitat:

---------------------------
rundll32.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x0042a490" verweist auf Speicher in "0x00000000". Der Vorgang
"written" konnte nicht auf dem Speicher durchgeführt werden.

... [Den Rest kennt ihr ja ^^] ...
Arbeitet die rundll32 nicht mit LoadModule und co. oder was muss ich tun, damit das klappt? Ich möchte dafür keine extra DLL beilegen, weil ich nicht genau weiß ob ich auf dem Datenträger Schreibzugriff habe.

Danke im voraus :-)

mirage228 15. Okt 2006 13:47

Re: exportierte Prozedur aus EXE mit rundll aufrufen
 
Hi,

Ich glaube Du musst die Prozedur als "stdcall" deklarieren. Die Delphi register-Aufrufkonvention dürfte RunDLL nicht bekannt sein...
Edit: Ach, Du hast eine EXE-Datei? Da frage ich mich, ob das (mit RunDll) überhaupt geht. :gruebel:

mfG
mirage228

diabox 15. Okt 2006 13:54

Re: exportierte Prozedur aus EXE mit rundll aufrufen
 
Also mit stdcall tut sich da noch nichts :-/ Selbe Exception.
Zitat:

Edit: Ach, Du hast eine EXE-Datei? Da frage ich mich, ob das (mit RunDll) überhaupt geht. :gruebel:
Eben das ist auch irgendwie meine Frage, ich war der Annahme, die Rundll würde auch mit LoadModule arbeiten... :cry:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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