如题,这是一个Delphi控制台程序program Project1;{$APPTYPE CONSOLE}uses
  SysUtils,
  zmqmm in '..\pub_sub\sub_client\zmqmm.pas';var
  context:pointer;
  frontend:pointer;
  backend:pointer;
  zmq_poll:smallint=1;
  items:array[0..1] of zmq_pollitem_t;
  item:zmq_pollitem_tp;
  msg:zmq_msg_t;
  msgp:zmq_msg_tp;begin
 msgp:=@msg;
 context:=zmq_init(1);
 frontend:=zmq_socket(context,6);
 backend:=zmq_socket(context,5);
  
 zmq_bind(frontend,'tcp://*:1038');
 zmq_bind(backend,'tcp//*:1039');
 
  items[0].socket:=frontend;
  items[0].fd:=0;
  items[0].events:=1;
  items[0].revents:=0;
  items[1].socket:=backend;
  items[1].fd:=0;
  items[1].events:=1;
  items[1].revents:=0;  item:=@items[0]; while True do
 begin
   zmq_poll(items,2,-1);
   if (items[0].revents<>0) then
   begin
   while True do
   begin
     zmq_msg_init(msgp);
     zmq_recv(frontend,msgp,0);
     zmq_send(backend,msgp,0);
     zmq_msg_close(msgp);
   end;
   end;
   if (items[1].revents<>0) then
   begin
     while True do
     begin
       zmq_msg_init(msgp);
       zmq_recv(backend,msgp,0);
       zmq_send(frontend,msgp,0);
       zmq_msg_close(msgp);
     end;
   end;
   zmq_close(frontend);
   zmq_close(backend);
   zmq_term(context);
 end;end.报错是:[Pascal Error] Project1.dpr(40): E2066 Missing operator or semicolon但是39行是:zmq_poll(items,2,-1);它没有缺操作符,也不差分号啊

解决方案 »

  1.   

    我用Delphi调用VC动态链接库,VC中的函数原型:
    ZMQ_EXPORT int zmq_poll (zmq_pollitem_t *items, int nitems, long timeout);
    typedef struct
    {
        void *socket;
    #if defined _WIN32
        SOCKET fd;
    #else
        int fd;
    #endif
        short events;
        short revents;
    } zmq_pollitem_t;我在Delphi封装是这样的:
    function zmq_poll(items:zmq_pollitem_tp;nitems:Integer;timeout:longint):Integer;cdecl;
    function zmq_poll;external'libzmq.dll'name'zmq_poll';
    zmq_pollitem_tp封装是这样的:
    type
    zmq_pollitem_t=packed record
      socket:Pointer;
      fd:cardinal;
      events:smallint;
      revents:smallint;
    end;
    zmq_pollitem_tp=^zmq_pollitem_t;
      

  2.   

    把其它代码删了一点一点试,光写zmq_poll(items,2,-1)这个能过不~