我尝试从 Indy TCP Server 线程连接到 (Uni)DDE 服务器。从正常应用程序我可以连接,并且可以获取/设置任何 PLC 变量。
但是当我使用来自 Indy 线程的相同命令(来自 Execute(AThread: TIdPeerThread) 事件)时,SetLink 命令失败。
procedure ReadDDE(AppPath, Service, Topic, Cmd: string; out Eredmeny : string; out HibaSzint : string);
var
DDE: TDDEClientConv;
pc : PChar;
begin
Eredmeny := '';
HibaSzint := '';
DDE := TDDEClientConv.Create(nil);
try
DDE.ConnectMode := ddeAutomatic;
DDE.ServiceApplication := AppPath;
DDE.FormatChars := False;
HibaSzint := 'SetLink';
if DDE.SetLink(Service, Topic) then begin
HibaSzint := '';
pc := DDE.RequestData(PChar(Cmd));
Eredmeny := StrPas(pc);
StrDispose(pc);
end;
finally
DDE.Free;
end;
end;
也许 DDE 正在使用 Windows 消息,或者其他东西不是线程安全的,或者在线程级别无法捕获?
感谢您提供有关此的任何信息:dd