AGB  ·  Datenschutz  ·  Impressum  







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

Modulkommunikation

Ein Thema von DGL-luke · begonnen am 20. Jun 2005 · letzter Beitrag vom 22. Jun 2005
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Modulkommunikation

  Alt 20. Jun 2005, 14:28
gegeben sei diese dll:

Delphi-Quellcode:
library communicating;

uses .....

...

var mainhandle: hWND;
    request:integer;

const WM_REQUEST = WM_USER + 1;

function init(handle:hWND):boolean;
begin
hWND := handle;
result:=true;
end;

function requestarrayvalue(arrayindex:integer;elementindex:integer):integer;
begin
request:=-1;
sendmessage(mainhandle,WM_REQUEST,arrayindex,elementindex);
while request = -1 do delay(1);
end;

function setrequest(value:integer):boolean;
begin
request:=value;
end;

exports .....;
end.
kann so etwas funktionieren, wenn das hauptprogramm die message empfängt und dann setrequest aufruft? und lässt das delay das abarbeiten der setrequest-funktion zu? soweit ich weiss, ist es ja nicht so "streng" wie sleep;

gibt es eine modelllösung für die kommunikation von dll zu hauptprogramm?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Modulkommunikation

  Alt 21. Jun 2005, 20:20
*push*

soll ich es als kompliment nehmen, dass ihr nicht antwortet, weil meine fragen immer so anspruchsvoll sind,
oder wollt ihr mir zu verstehen geben, dass ihr mich nicht mögt und ich wieder gehen soll?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Modulkommunikation

  Alt 21. Jun 2005, 20:29
Zitat von DGL-luke:
soll ich es als kompliment nehmen, dass ihr nicht antwortet, weil meine fragen immer so anspruchsvoll sind,
oder wollt ihr mir zu verstehen geben, dass ihr mich nicht mögt und ich wieder gehen soll?
Ich denke es ist zu warm das man über alle fragen nachdenkt

1, Du solltest für sowas eher PostMessages nehmen. Damit wird die Message sofort zugestellt.
2, Delay ist ganz schlecht, da dein Programm komplett angehalten wird (auch die abarbeitung der Message-Queue

Warum übergibst Du nicht einfach eine Callback-Message-Funktionspointer von der Exe in die DLL? Damit wird die Funktion sofort aufgerufen.

P.S. Wieso gibt es bei solch einem Wetter keinen schwitzenden Smiley?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Modulkommunikation

  Alt 21. Jun 2005, 20:37
um halb zehn schwitzt du noch? wie heiss muss es bei euch sein...

@Funktionspointer:

ja, der gedanke kam mir auch schon mal. das heisst, ich werfe der dll eine funktion zu, mit der sie bestimmte daten aus dem hauptprog holen kann? das ist ja direkt raffiniert...

das muss doch andersrum auch gehen, oder?

ach ja, und wie rufe ich eine funktion auf, von der ich nur die adresse kenne? geht das über eine funktionsvariable?

Delphi-Quellcode:
var funktion:function;

function:=4566;

function(someparam);
wie geht sowas?

PS: pushen bringt ja doch was
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#5

Re: Modulkommunikation

  Alt 21. Jun 2005, 20:42
Zitat von DGL-luke:
kann so etwas funktionieren, wenn das hauptprogramm die message empfängt und dann setrequest aufruft? und lässt das delay das abarbeiten der setrequest-funktion zu? soweit ich weiss, ist es ja nicht so "streng" wie sleep;
Sehe es als Kompliment an Ich würde dir raten es einfach auszuprobieren. Aber das Windows-SDK gibt doch schon etwas aufschluss dadrauf:

Zitat von SDK:
If the specified window was created by the calling thread, the window procedure is called immediately as a subroutine. If the specified window was created by a different thread, Windows switches to that thread and calls the appropriate window procedure. Messages sent between threads are processed only when the receiving thread executes message retrieval code. The sending thread is blocked until the receiving thread processes the message.
Bedeutet, dass die Message-Funktion im Programm sofort aufgerufen wird, da ich davon ausgehen, dass es im gleichen Thread passiert. Das bedeutet, dass deine Schleife am Ende unnötig ist, da setRequest ja sowieso gleich aufgerufen wird.

P.S: Das ist meine Interpretation. Ungetestet und ohne davon Ahnung zu haben
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Modulkommunikation

  Alt 21. Jun 2005, 20:53
Zitat von DGL-luke:
um halb zehn schwitzt du noch? wie heiss muss es bei euch sein...
Hab gerade noch kreativ sein müssen ('nen kleinen Flyer). Bin aber schon beim Abkühlen

Zitat von DGL-luke:
@Funktionspointer:

ja, der gedanke kam mir auch schon mal. das heisst, ich werfe der dll eine funktion zu, mit der sie bestimmte daten aus dem hauptprog holen kann? das ist ja direkt raffiniert...

das muss doch andersrum auch gehen, oder?
Du meinst von der Exe in die DLL. Machst Du doch wahrscheinlich schon die ganze Zeit. Sind doch die exportierten DLL-Funktionen.
Zitat von DGL-luke:
ach ja, und wie rufe ich eine funktion auf, von der ich nur die adresse kenne? geht das über eine funktionsvariable?
Delphi-Quellcode:
type
  TMeinFunktionsprototyp=function(Param1, Param2: Integer): WordBool; stdcall;

var
  FktPtrFromExe: TMeinFunktionsprototyp;

procedure SetFuncPointer(FktPtr: TMeinFunktionsprototyp)
begin
  FktPtrFromExe := FktPtr
end;

function CallFktPtr((Param1, Param2: Integer): Boolean;
begin
  if Assigned(FktPtrFromExe) then
    result := FktPtrFromExe(Param1, Param2);
end;
Kein Kompilierungstest durchgeführt.

Zitat von DGL-luke:
PS: pushen bringt ja doch was
Solang man nicht gegen die 24h-Regel verstößt und sich unbeliebt macht.
Ab und zu wird ja mal was übersehen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Modulkommunikation

  Alt 21. Jun 2005, 21:36
auuuus....gezeichnet! [mit montgomery burns-stimme]

sobald ich meinen pc wieder funktionsfähig hab, wird das ausführlich getestet.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
barf00s
(Gast)

n/a Beiträge
 
#8

Re: Modulkommunikation

  Alt 22. Jun 2005, 07:52
Zitat:
2, Delay ist ganz schlecht, da dein Programm komplett angehalten wird (auch die abarbeitung der Message-Queue
seit wann hält delay das programm an, Sleep() würde das machen, was man mit Delay ja umgeht </senf>
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Modulkommunikation

  Alt 22. Jun 2005, 07:58
Zitat von barf00s:
Zitat:
2, Delay ist ganz schlecht, da dein Programm komplett angehalten wird (auch die abarbeitung der Message-Queue
seit wann hält delay das programm an, Sleep() würde das machen, was man mit Delay ja umgeht </senf>
Äh, war doch zu warm - oder zu viel Kühlung
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 18:12 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