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 Prozedur einer anderen Andwendung aufrufen (https://www.delphipraxis.net/35932-prozedur-einer-anderen-andwendung-aufrufen.html)

mrsiemens 13. Dez 2004 21:29


Prozedur einer anderen Andwendung aufrufen
 
Hallo,

ich habe hier folgendes Problem.

Ich habe 2 Anwendungen, nennen wir sie App1 und App2.

App1 übergibt per Filemapping Daten an App2.
Mit übergeben werden soll dabei ein Zeiger auf eine Callbackmethode.

Wie muss ich nun diese Callbackmethode anlegen damit App2 diese Methode ausführen kann?

Hier 'n Stück Code dazu:
Code:
type
TCallBackFunktion = function (Param: Integer; var Result: Double): Byte; stdcall;

TMyData = record
 dummy: Integer;
 Callback: TCallBackFunction;
end;
Sobald ich die CallBack(...) in App2 aufrufe, kommt es zu einer Schutzverletzung!?

Ich habe schon mehrmals Callbacks für Funktionen zwischen DLLs und Programmen verwendet.
Gibt es da einen Unerschied wenn ich mit 2 Programmen arbeite?

Hat vielleicht jemand eine Idee für dieses Problem?

Mfg
mrsiemens

dizzy 13. Dez 2004 22:05

Re: Prozedur einer anderen Andwendung aufrufen
 
Da würde ich der Einfachheit halbar mit Messages arbeiten.

Gruss,
Fabian

mrsiemens 13. Dez 2004 22:09

Re: Prozedur einer anderen Andwendung aufrufen
 
Messages machen dies aber auf keine Fall leichter :(

Vielleicht noch folgendes:

Die Callbackmethode dient dazu eine sehr grosse Anzahl an Funktionswerten zu berechnen.

In App1 ist ein Math.Parser integriert - in App2 nicht.

App2 soll für eine Reihe gegebener Funktionen eine Isofflächengrafik zeichnen und lässt die Funktionswerte via Callbackfunktion von App1 berechnen.

Luckie 13. Dez 2004 22:12

Re: Prozedur einer anderen Andwendung aufrufen
 
Generell bietet das PE32 Dateiformat die Möglichkeit, dass Anwendungen wie DLL's Funktionen exportieren können. Sie sind aber dafür eigentlich nicht gedacht, da du zwei Adressräume hast und die unter 32-Bit Windows strikt von einander getrennt werden. Inter Process Communication läßt sich leichter mit einer gemeinsamen DLL, MMF oder Messages besser und leichter realisieren. Zu IPC wirf mal einen Blick in das DLL Tutorial von Assarabd: http://www.luckie-online.de/Delphi/Importe/Assarbad/

mrsiemens 13. Dez 2004 22:30

Re: Prozedur einer anderen Andwendung aufrufen
 
Danke :)

Ich habe mir das ganze aber schon angeschaut.

Stichwort gemeinsame DLL, wenn ich eine DLL jeweils in einer Anwendung lade, dann habe ich doch 2 Instanzen dieser DLL.
Dann kann ich doch genausowenig gemeinsam darauf zugreifen!?

Oder seh ic hdas falsch?

c113plpbr 14. Dez 2004 16:13

Re: Prozedur einer anderen Andwendung aufrufen
 
Zitat:

Zitat von mrsiemens
Stichwort gemeinsame DLL, wenn ich eine DLL jeweils in einer Anwendung lade, dann habe ich doch 2 Instanzen dieser DLL.
Dann kann ich doch genausowenig gemeinsam darauf zugreifen!?

Das ist richtig so, du hast da keine direkten zugriffsmöglichkeiten. Aber es gibt eine recht gute methode, und zwar sind das die IPC-Funktionen von Madshi, zu finden in der MadCodeHook-Library, welche sich in der MadCollection auf http://www.madshi.net/ finden lässt.

Damit kann man dann "Nachrichten" in Form von Funktionsaufrufen (welche nachricht und antwort-parameter besitzen) "versenden". Das läuft recht gut, und ich verwende es immer wieder gerne. Die kostenlose version der MadCodeHook-Lib ist allerdings ohne quellcode, und sie darf nur für den nicht-kommerziellen bereich eingesetzt werden.

ciao, Philipp

mrsiemens 14. Dez 2004 17:40

Re: Prozedur einer anderen Andwendung aufrufen
 
Gut danke - ich schau mir das mal an...

shmia 14. Dez 2004 17:53

Re: Prozedur einer anderen Andwendung aufrufen
 
Zitat:

Zitat von mrsiemens
Ich habe 2 Anwendungen, nennen wir sie App1 und App2.

App1 übergibt per Filemapping Daten an App2.
Mit übergeben werden soll dabei ein Zeiger auf eine Callbackmethode.

Wie muss ich nun diese Callbackmethode anlegen damit App2 diese Methode ausführen kann?

Da du anscheinend beide Anwendungen programmierst, kannst du auch beiden Anwendungen
eine Automatisierungschnittstelle verpassen.
(AnwendungA: Automatisierungs-Client , AnwendungB: Automatisierungs-Server)
Du begibst dich damit auf das Feld COM/DCOM/ActiveX.
Damit kann man jedes Objekt in deinen Anwendungen über ein Interface "nach aussen legen".
Du hast sehr grosse Möglichkeiten, musst aber auch einiges lernen.


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