我想写一个DLL,DLL封装了对TCP/IP的处理,简单的说就是在这个DLL中使用了Clientsocket和Serversocket,以便完成数据的发送和接收。数据的发送小弟比较明白,只要在主程序中调用DLL中写好的函数就可以了,问题是使用当Serversocket接收远端机器发来的数据时,我该如何在主程序中判断什么时候数据到了,什么时候该对数据进行处理。小弟想到用回调函数,但无奈对此不是很了解,请教各位大虾,回调函数该怎么写?主程序中该如何配合回调函数的使用?或者不采用回调函数的方式而另有其他方法对Serversocket接收的数据进行处理?

解决方案 »

  1.   

    library Project1;
    uses
      SysUtils,
      Classes;
    type
     TCallBackProc = procedure(vi: PChar); procedure Test(vs: PChar; cbp: TCallBackProc); stdcall;
     begin
       TCallBackProc(cbp)(vs);
     end;{$R *.res}exports
      Test;begin
    end.
      

  2.   

    你只要在 VC 中声明一个 TCallBackProc 形式的函数,如void YourCallBackProc(atype vi);然后这样调用 DLL 的函数: Test(vs,YourCallBackProc)
      

  3.   

    在DLL中定义的回调函数是否可以在DLL中被调用,如果可以能否举例说明一下,谢谢各位大虾。
      

  4.   

    我的意思是,在DLL中有一个On事件,它调用了这个回调函数,而回调函数的具体实现是在主程序中,这样就像VC或Delphi中的触发事件一样,自动完成对相应事件的处理。
      

  5.   

    你在 DLL 中新添加一个函数,专门用于设置回调函数,用一个变量保存此函数的地址:
    var
      YourCallbackProc:TCallbackProc;
    procedure SetCallbackProc(ACallbackProc:TCallBackProc);
    begin
      YourCallbackProc:=@ACallbackProc;
    end;在 On 事件中,写:
    if Assigned(YourCallbackProc) then
      YourCallbackProc(...);