Source file: /~heha/BETA/matdde32.zip/SRC/DDEADV.PAS

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 können 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;			{"Heiße" 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 könnte ja sein, es kommt sofort ein Rückruf}
  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-Rückgabe}
  mxSetLogical(plhs[0]);		{neu bei Matlab5}
  HandleDdeError(0);		{falls etwas schiefging: anzeigen!}
 end;

exports
 mexFunction;
begin
 DisableThreadLibraryCalls(HInstance);
end.
Detected encoding: OEM (CP437)1
Wrong umlauts? - Assume file is ANSI (CP1252) encoded