不管用哪种控件或者是API,如果向串口发数据后,硬件发回数据,都会有相应的事件发生,比如cport的OnRxChar,spcomm的OnRecviceData等,但是如果我把这个控件封闭进DLL后,事件就不会触发,不要和我说用TIMER,也不用线程,就用回调函数来实现,谁会,解决后再单独开帖给分,谢谢,最好给出源码

解决方案 »

  1.   

    系统是基于消息机制的,要想从DLL返回事件,首要条件就是要将应用程序的窗口句柄传递给DLL,不然,DLL无从响应消息。既然你也用过spcomm,从它的源码中,你就该明白它的事件产生和响应的机理。
      

  2.   

    杯具的是,这个DLL是没有界面的,所以无法获得HANDLE,
      

  3.   

    Dll的导出函数,比如
    MySPCOMMCall(AHandle: THandle; ...);
    begin
      Application.Handle := AHandle;
      ...
    end;你的exe程序调用的时候:
    MySPCOMMCall(Application.Handle,...)
      

  4.   

    能不能给些实际的,咋都回答的这么不关疼痒
    不要都装高深,来点干的
    高手都走了,还是整个DELPHI版整体水平下降了
      

  5.   

    告诉你原因和方法你不去理解,反而对你好心帮助说成是装高深。还上升至delphi版整体水平的论调。
    不仅不学无术,而且狂妄浮躁。
      

  6.   

    通用的串口组件其实并非好用,应对一些简单的情况是方便的。稍一复杂,还不如直接用API ,代码量不会增加多少。
      

  7.   


    你这句话说的不对。官方提供了一个函数,可以让DLL有句柄,不知道你写过服务没有,服务也是没句柄的,但有办法让它虚拟一个句柄出来使用。
      

  8.   

    这种问题本身就没有完整的答案,别人只能给你提供思路
    dll中可以没有窗体,把你dll中的接收函数,作为一个回调函数让外部程序来处理就行了
    至于回调函数怎么写,我真解释不清楚呵呵,好像我说的也是狗P方法
      

  9.   

    原来的那个例子,完全可以触发的,注意到这句
    CPort.SyncMethod := smNone;
    DLL无需获得HANDLE一样可以
      

  10.   

    写一个与RxChar参数一致的方法,然后把com.OnRxChar指向那个方法,完全没有问题