library ddeadv;
uses PasMex32,Windows,DDEML,dde_init;
{jede dieser DLLs auf andere Basisadressen relozieren}
{$IMAGEBASE $10050000}
procedure mexFunction(nlhs:LongInt; var plhs:TMatArr;
nrhs:LongInt; const prhs:TMatArr); stdcall;
var
conv: HConv;
items: array[0..MaxAdvItems-1] of Hsz;
i,AdvItems: Integer;
cf: UInt;
format: EClip;
timeout: LongInt;
outchar: Bool;
evalstring: PChar;
xtyp: UInt;
ok, gok: Bool; {Okay und Gesamt-Okay}
arrayname: array[0..mxMAXNAM-1] of Char;
{Mehr-als-zwei-dimensionale Matrizen knnen nur mit CF_MatTable
bertragen werden}
begin
TestInputArgs(nrhs,prhs,3,6,$1E,$39); {nccbbn}
conv:=Round(mxGetScalar(prhs[0]));
AdvItems:=ArrayToStringHandles(prhs[1],@items[0],MaxAdvItems);
evalstring:=mxArrayToString(prhs[2]);
arrayname[0]:=#0;
xtyp:=XTYP_AdvStart or XTYPF_NoData; {"Warme" Verbindung}
if nrhs>=4 then begin
if mxIsChar(prhs[3])
then mxGetString(prhs[3],arrayname,sizeof(arrayname))
else lstrcpyn(arrayname,mxGetName(prhs[3]),sizeof(arrayname));
if arrayname[0]<>#0
then xtyp:=XTYP_AdvStart; {"Heie" Verbindung}
end;
outchar:=false; cf:=CF_Text; format:=Text;
if nrhs>=5 then format:=CheckClipFormat(prhs[4],cf,@outchar);
{testen & umwandeln in EClip}
timeout:=StdTimeOut;
if nrhs=6 then timeout:=Round(mxGetScalar(prhs[5]));
{Erst bekanntmachen; es knnte ja sein, es kommt sofort ein Rckruf}
if conv<>0 {keinen Super-GAU blo wegen Null-Handle!}
then for i:=0 to AdvItems-1 do begin
advNewInfo(conv,items[i],cf,format,outchar,arrayname,evalstring);
end;
mxFree(evalstring);
gok:=true;
for i:=0 to AdvItems-1 do begin
ok:=DdeClientTransaction(nil,0,conv,items[i],cf,xtyp,timeout,nil)<>0;
gok:=gok and ok;
if (not ok) and (conv<>0) then advDeleteInfo(conv,items[i],cf);
end;
plhs[0]:=mxCreateDoubleMatrix(1,1,mxReal);
mxGetPr(plhs[0])^:=LongInt(gok); {BOOL-Rckgabe}
mxSetLogical(plhs[0]); {neu bei Matlab5}
HandleDdeError(0); {falls etwas schiefging: anzeigen!}
end;
exports
mexFunction;
begin
DisableThreadLibraryCalls(HInstance);
end.
Vorgefundene Kodierung: UTF-8 | 0
|