Hi Leute!
Ich möchte gerne durch eine
Dll eine Abfrage über eine TDdeClientConv machen. Das Senden der Daten verläuft problemlos. Allerdings macht mir das Empfangen der Daten vom Server Probleme:
Hier der Quelltext von der
DLL:
Delphi-Quellcode:
uses
SysUtils,
DdeMan,
Windows,
Classes;
type
TDummy = class (TForm)
public
class procedure DllClientItemChange(Sender: TObject);
end;
var
DllClientConv : TDdeClientConv;
DllClientItem : TDdeClientItem;
MsgError : string;
MsgResult : string;
ServerResponse: boolean;
{$R *.res}
class procedure TDummy.DllClientItemChange(Sender: TObject);
begin
if DllClientItem.Lines.Count = 2 then begin
MsgError := DllClientItem.Lines.Strings[0];
MsgResult:= DllClientItem.Lines.Strings[1];
end
else if DllClientItem.Lines.Count = 1 then
MsgError:= DllClientItem.Lines.Strings[0]
else
MsgError:= 'Error in server response!';
ServerResponse:= true;
MsgError:= 'No Error';
end;
function GetCredits(PcName, UserName: string; var CreditValue: string;
var Error: string; TimeOut: integer = 100): boolean;
var
li1: integer;
begin
DllClientConv := TDdeClientConv.Create(nil);
DllClientItem := TDdeClientItem.Create(nil);
DllClientConv.Name := 'DLLClientConv';
DllClientItem.Name := 'DllClientItem';
DllClientItem.DdeConv := DllClientConv;
DllClientItem.OnChange:= TDummy.DllClientItemChange;
DllClientItem.DdeItem := 'CreditManagerServerItem';
result := DllClientConv.SetLink('Project1', 'CreditManagerServerConv');
ServerResponse := false;
MsgError := '';
if result then begin
DllClientItem.Lines.Add('GET_CREDITS');
DllClientItem.Lines.Add(PcName);
DllClientItem.Lines.Add(UserName);
result:= DllClientConv.ExecuteMacroLines(DllClientItem.Lines, true);
if result then begin
li1:= GetTickCount;
while GetTickCount-li1 <= 5000 do begin
if ServerResponse = true then
Exit;
end;
if ServerResponse then begin
try
CreditValue:= DllClientItem.Lines.Text;
Error := PChar(MsgError+'s');
except
CreditValue:= '0';
result := false;
Error := PChar('GET_CREDITS-value is not an integer');
end;
end
else begin
CreditValue:= '0';
result := false;
Error := PChar(MsgError);
end;
end;
end;
end;
exports
GetCredits;
begin
end.
Hier der Code von der Client-App:
Delphi-Quellcode:
function GetCredits(PcName, UserName: string; var CreditValue: PChar; var Error: PChar; TimeOut: integer = 100): boolean; external 'D:\Project1.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
s1, s2: PChar;
begin
GetCredits(PChar('Test'), PChar('Test'), s1, s2, 100);
ListBox1.Items.Add('New request: '+TimeTostr(now));
ListBox1.Items.Add('Value: '+s1);
ListBox1.Items.Add('Error: '+s2);
ListBox1.Items.Add('-------------------------------');
ListBox1.Items.Add('');
ListBox1.Selected[ListBox1.Items.Count-1]:= true;
end;
Hier der Code von der Server-App:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DdeMan;
type
TForm1 = class(TForm)
Button1: TButton;
CreditManagerServerConv: TDdeServerConv;
CreditManagerServerItem: TDdeServerItem;
ListBox1: TListBox;
Label1: TLabel;
procedure CreditManagerServerConvExecuteMacro(Sender: TObject; Msg: TStrings);
procedure Button1Click(Sender: TObject);
procedure CreditManagerServerConvOpen(Sender: TObject);
procedure CreditManagerServerConvClose(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.CreditManagerServerConvExecuteMacro(Sender: TObject;
Msg: TStrings);
begin
if Msg.Text <> 'Recieved!' then begin
ListBox1.Items.Add('New message recieved: '+TimeTostr(now));
ListBox1.Items.AddStrings(Msg);
ListBox1.Items.Add('Response = 1234');
ListBox1.Items.Add('----------------------------');
ListBox1.Items.Add('');
ListBox1.Selected[ListBox1.Items.Count-1]:= true;
CreditManagerServerItem.Lines.Add('1234');
CreditManagerServerItem.Lines.Add('No Error');
end
else begin
ListBox1.Items.Add('Last message recieved by client');
ListBox1.Items.Add('----------------------------');
ListBox1.Items.Add('');
end;
end;
Ist es überhaupt möglich oder hab ich etwas übersehen?
Bin euch für eure Hilfe dankbar.