![]() |
Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt
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: ![]() |
AW: Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt
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; ... |
AW: Kurze Hilfestellung bei Funktionsaufruf für DDE benötigt
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:36 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