写了个模块,需要把它封装在COM组件里(流程是建立一个ActiveX Library->COM object)现在遇到的问题是,
执行Synchronize方法来显示界面消息时,线程会挂起
线程结束后没有触发OnTerminate事件,
不知道这两个问题该如何解决?
望大虾们帮帮忙,谢谢。因为程序里用了很多这些方法,所以改变机制比较麻烦,最好能不改这些程序。
当然实在不行就只能改了。

解决方案 »

  1.   

    不用,大家自己试试就知道效果了。
    在COM组件中随意起一个线程。
    这个线程执行中调用Synchronize方法,大家跟一下就知道了,调用完Synchronize线程会挂起。
    线程结束后不能执行OnTerminate事件。我感觉应该是COM组件和TThread之间兼容的问题。
      

  2.   

    Synchronize 是当线程访问可视组件时用的, COM 中又没有这种东东, Synchronize执行时会进入主线同步, 不知 COM 里有没主线, 现在 COM 组件一般都是 DLL 的吧所以不要用Synchronize
      

  3.   

    的确是这样,问题我自己解决了,就是内部自建的窗体中消息模式来执行Synchronize和OnTerminate、。
      

  4.   

    个人认为Com组件应该是服务器端的,如果有窗体的话,该窗体在哪显示呢?服务器端还是客户端?没做过,只是一个印象。就象ASP程序如果在服务器端alert的话,肯定会报错的。存属个人愚见!
      

  5.   

    呵呵,不错,大家可以借此谈谈COM组件的一些问题。来者都有分^_^!
    ----------------------
    to comerliang(天地良心):
    我们其实只是用COM组件来打包一个模块,便于别人的使用和管理。
    并不一定需要在Web中使用。比如我现在写的这个就不是在web中用的。
    ----------------------
    以前我用CB开发过OCX,发现VCL和ActiveX之间的融合还存在很多的问题。
    COM组件也是一样。总之开发基于ActiveX的东东,个人感觉用VCL还是
    比较容易出问题(感觉CB的问题比Delphi还要多些),
    最好还是拿VC来写
    其实最底层的东西应该还是ATL,这点没有仔细研究过,以前听一个师兄这样说过。
    ----------------------