Discussion:
DDE-Komunikation
(zu alt für eine Antwort)
Jens Köhler
2016-02-23 18:44:03 UTC
Permalink
Hallo Leute,

ich versuche per DDE Daten von einem Programm abzufragen.

1.
Lt. Hilfe wartet ExecuteMacro mit WaitFlag = true auf die Abarbeitug
des Macro. Was muß man den auf Serverseite tun, um zu sagen: "Ich habe
fertig". Denn nach dem Aufruf gibt es keine weitere Kommunikation mehr.

Es funktioniert allerdings auch mit false, da RequestData erst
zurückkehrt, wenn die Daten da sind. Getestet mit einem sleep auf der
Serverseite. Wie geht es mit WaitFlag = true?

if DdeClientConv1.ExecuteMacro(Befehl, true) then
begin
res := DdeClientConv1.RequestData(DDEClientItem1.DDEItem);
if res <> nil then
begin
//s := StrPas(res);
s := res;
StrDispose(res);
...

2.
RequestData liefert ein PChar, das man lt. Hilfe mit StrDispose
freigeben soll. Bei StrDispose steht allerding, das es nur noch aus
Gründen der Abwärtskompatibilität dabei ist. Genau wie bei StrPas.
Als Ergebnis möchte ich einen String. Was verwende ich zum freigeben
oder muß ich überhaupt freigeben?

D5 unter WinXP

Jens
Hans-Peter Diettrich
2016-02-26 10:17:50 UTC
Permalink
Post by Jens Köhler
ich versuche per DDE Daten von einem Programm abzufragen.
Ist das nicht seit 20 Jahren obsolet?
Warum nicht mit OLE, COM, ActiveX...?
Post by Jens Köhler
RequestData liefert ein PChar, das man lt. Hilfe mit StrDispose
freigeben soll.
Das könnte auf die aktuelle Implementierung von DDE (in Windows)
ankommen. Früher (16 Bit?) wurde dazu globaler Speicher benutzt, der vom
Empfänger freigegeben werden mußte (GlobalFree). Ob das was mit
StrDispose zu tun hat/te, kann ich nicht sagen.
Post by Jens Köhler
Bei StrDispose steht allerding, das es nur noch aus
Gründen der Abwärtskompatibilität dabei ist. Genau wie bei StrPas.
Als Ergebnis möchte ich einen String. Was verwende ich zum freigeben
oder muß ich überhaupt freigeben?
D5 unter WinXP
Schau mal in der Hilfe (Win SDK) nach, ob sich dort was zu DDE finden
läßt. Oder im aktuellen MSDN...

DoDi
Jens Köhler
2016-02-26 14:34:17 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Jens Köhler
ich versuche per DDE Daten von einem Programm abzufragen.
Ist das nicht seit 20 Jahren obsolet?
Warum nicht mit OLE, COM, ActiveX...?
Weil ich einfach nur einigen Daten abfragen möchte und zu DDE habe ich
Server- und ClientKomponenten.
Die anderen Sachen scheinen mir doch erheblich komplizierter zu sein.
Zu OLE steht in der hilfe als erstes, das ich Menüs verschmelzen und
Werkzeugleisten einblenden kann, was ich nicht will.
Und was ich bei OLE, COM u. ActiveX auf der Serverseite machen muß, dazu
habe ich gar nichts gefunden.
Post by Hans-Peter Diettrich
Schau mal in der Hilfe (Win SDK) nach, ob sich dort was zu DDE finden
läßt. Oder im aktuellen MSDN...
DoDi
Im Win SDK zu D5 habe ich nichts gefunden, was für mich einen Nährwert hat.
Im aktuellen MSDN werde ich mal nachsehen.

Danke
Jens
Jens Köhler
2016-02-27 14:00:58 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Jens Köhler
ich versuche per DDE Daten von einem Programm abzufragen.
RequestData liefert ein PChar, das man lt. Hilfe mit StrDispose
freigeben soll.
Das könnte auf die aktuelle Implementierung von DDE (in Windows)
ankommen. Früher (16 Bit?) wurde dazu globaler Speicher benutzt, der vom
Empfänger freigegeben werden mußte (GlobalFree). Ob das was mit
StrDispose zu tun hat/te, kann ich nicht sagen.
Post by Jens Köhler
Bei StrDispose steht allerding, das es nur noch aus
Gründen der Abwärtskompatibilität dabei ist. Genau wie bei StrPas.
Als Ergebnis möchte ich einen String. Was verwende ich zum freigeben
oder muß ich überhaupt freigeben?
D5 unter WinXP
DoDi
In der Hilfe zu Delphi XE8, die ich im Netz gefunden habe, steht der
gleichr Text wie zu D5.

PChar mit StrDispose freigeben, aber StrDispose ist historisch.
Es steht aber auch keine Alternative. Auch sonst habe ich nichts dazu
gefunden.

Da die Zuweisung eines PChar an einen String anscheinend eine Kopie
macht, werde ich mich an die Hilfe halten, und den PChar mit StrDispose
freigeben.

Jens
Hans-Peter Diettrich
2016-02-28 00:22:26 UTC
Permalink
Post by Jens Köhler
Da die Zuweisung eines PChar an einen String anscheinend eine Kopie
macht, werde ich mich an die Hilfe halten, und den PChar mit StrDispose
freigeben.
Du kannst ja mal FastMM4 benutzen, der liefert im Debug-Modus
Informationen über alle nicht freigegebenen Speicherbereiche. Nimm die
älteste Version die Du findest, die neueren compilieren nicht mit D5.

DoDi
Jens Köhler
2016-02-28 07:41:37 UTC
Permalink
Post by Hans-Peter Diettrich
Post by Jens Köhler
Da die Zuweisung eines PChar an einen String anscheinend eine Kopie
macht, werde ich mich an die Hilfe halten, und den PChar mit StrDispose
freigeben.
Du kannst ja mal FastMM4 benutzen, der liefert im Debug-Modus
Informationen über alle nicht freigegebenen Speicherbereiche. Nimm die
älteste Version die Du findest, die neueren compilieren nicht mit D5.
DoDi
werde ich probieren.
Danke.

Jens

Loading...