AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt
Thema durchsuchen
Ansicht
Themen-Optionen

Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt

Ein Thema von st.w · begonnen am 21. Jun 2016 · letzter Beitrag vom 22. Jun 2016
Antwort Antwort
st.w

Registriert seit: 5. Jan 2016
11 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt

  Alt 21. Jun 2016, 10:00
Hallo Mehr-Wissende,

ich muß mein (DELPHI 4)-Programm an ein Fremd-Messprogramm anbinden, das dafür nur eine DDE-Schnittstelle anbietet.
Diese Anbindung funktioniert nicht unter der von mir schon früher erfolgreich verwendeten unit DDEMan (TDdeClientConv / TDdeClientItem)-Funktionanlität - leider keine Anbindung per SetLink/OpenLink möglich.

Nach langem Suchen habe ich eine Lösung gefunden, die zumindestens per Debuggerdurchsteppen mit dem Messprogramm konnektiert!
Auch der .Execute-Befehl meldet keinen Fehler laut Debuggerdurchsteppen.

Ich bin in Delphi-Programmierung (noch) nicht so tief bewandert, dass ich das Auslesen mit den Funktionen der Unit DDEObjec umsetzen könnte.

Meine Frage: Wie lese ich ein dokumentiertes DDEItem 'Measure', dem ein Marco 'GetMeasure' uzugeordnet ist, aus?

Wie lautet ein Funktionsaufruf dafür konkret? Wie komme ich an den Wert von hData:hDDEData, wenn ich die von mir favorisierte Funktion GetDataAsStrObj(..) nutzen wollte? Oder ist eine andere Funktion richtiger?

Bitte helft mir - Ich habe schon alle meine Tricks angewandt und alles abgegooglet...

Danke Euch vorab,
Stefan


Der Code aus letztem Beitrag aus: http://www.delphipraxis.net/84293-dd...temchange.html
  Mit Zitat antworten Zitat
st.w

Registriert seit: 5. Jan 2016
11 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt

  Alt 21. Jun 2016, 10:03
Hier ein Ausschnitt aus dem Code - Leider klappt die Code-Formattierung bei mir nicht...


unit Unit1;
...
uses ..., DDEObjec, DDEML;

type
TForm1 = class(TForm)
...
private
public
end;

function DdeDataChange(CallType, Fmt: UINT; Conv: HConv; hsz1, hsz2: HSZ; Data: HDDEData; Data1, Data2: DWORD): HDDEData; stdcall;
var Form1: TForm1;
implementation

{$R *.DFM}

var count: Integer = 0;
dde: TDDEMLClass;

function DdeDataChange(CallType, Fmt: UINT; Conv: HConv; hsz1, hsz2: HSZ; Data: HDDEData; Data1, Data2: DWORD): HDDEData;
var str:String;
begin
dde.GetDataAsStrObj(data, str);
Form1.Memo1.Lines.Add(str);
//result := data; eine Result darf ich nicht zurückgen, der DDE-Server meldet sonst einen Timeout?!?
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
dde := TDDEMLClass.Create(DDEDataChange, 0);
dde.Connect(PAnsiChar(edtService.Text), PAnsiChar(edtTopic.Text));
dde.Execute(PAnsiChar(edtMacro.Text));

// HIER BRAUCHE ICH DIE FUNKTIONSAUFRUFE
end;
end.


// Der Anfang der Unit DDEObjec:


{+------------------------------------------------------------
| Unit DDEObjec
| Version: 2.0 Created: 12/18/96, 12:58:02 Last Modified: 12/18/96, 12:58:02
| Author : P. Below
| Project: Common utilities
| Description: Simple DDEML interface for Delphi 2.0
+------------------------------------------------------------}
Unit DDEObjec;

Uses Windows, DDEML, SysUtils, ErrClass;

Type
EDDEMLException = Class( Exception );

TDDEMLClass = Class( TErrClass )
private
f_Inst: LongInt; (* ddeml instance *)
f_Conv: HConv; (* conversation handle *)
f_Server: HSz; (* server name string handle *)
f_Topic : HSz; (* topic name string handle *)
f_Timeout: LongInt; (* timeout for transactions *)
f_LastResult: LongInt; (* last transaction result *)
f_LastError : LongInt; (* last dde error status *)
f_CallbackInst: TFNCallback; (* callback for this instance *)
f_codepage : Integer; (* default code page to use *)

protected
public
Constructor Create( aCallback: TFNCallback; flags : LongInt );
Destructor Destroy; override;

Function MakeHSz( aStr: PChar ): HSz;
Procedure FreeHSz( Var aHSz: HSz );
Function CompareHSz( HSz1, HSz2: HSz ): Integer;
Function QueryHSz( aHSz: HSz; Var aStrObj: String ): Boolean;

Function Connect( aServer, aTopic: PChar): Boolean;
Procedure Disconnect;
Function ClientTransaction( pServerData: Pointer; dataSize: LongInt; Item: HSz; Format, DataType: UINT ): HDDEData;
Function Request( Item: PChar; Format:UINT ): HDDEData;
Function Execute( command: PChar ): Boolean;
Function GetData( hData: hDDEData; buf: Pointer; bufSize, offset: LongInt ): LongInt;
Function GetDataAsStrObj( hData: hDDEData; Var aStrObj: String ): Boolean;
Procedure FreeDatahandle( hData: hDDEData );
Function CreateDataHandle( source: Pointer; len, offset: LongInt; item: HSz; Format, Command: UINT): hDDEData;
Function AddData( data: hDDEData;source: Pointer; len, offset: LongInt ): hDDEData;
Function AccessData( data: hDDEData; DataSize: PDWORD ): Pointer;
Procedure UnaccessData( data: hDDEData );

Function IsConnected: Boolean;
Function IsValid: Boolean;

Procedure DDE_Error;
Procedure SetDDE_Error( err: Longint );

property Timeout: LongInt read f_timeout write f_timeout;
property LastDdeError: LongInt read f_lasterror;
property LastDdeResult: LongInt read f_lastresult;
property Server: HSz read f_server;
property Topic: HSz read f_topic;
property Codepage: Integer read f_codepage write f_codepage;

End;
...
  Mit Zitat antworten Zitat
st.w

Registriert seit: 5. Jan 2016
11 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt

  Alt 22. Jun 2016, 11:14
Hallo Mehr-Wissende,

ich als "Thema poster" realisiere gerade, dass der von MIR gepostete Code als Antwort mißverstanden werden könnte.

ALSO: Bitte helft mir bei dem Code zum Funktionsaufruf für die DDE-Abfrage, den ich immer noch verzweifelt versuche zu programmieren - Danke!

Gruß
Stefan
  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 21:57 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