在这个com中加一个属性或方法,初始化为某个值,用这个值来判断是否已创建。

解决方案 »

  1.   

    开什么玩笑?
    你难到不知道你用什么名字定义的这个组件吗?
    判断它是否Nothing不就得了....
      

  2.   

    我想到这一点了,但是我的程序中有几个不同的Com,我如何在一个Com中判断另外一个Com是否已经创建了呢?启动一个Com,就会启动一个进程,在Win2000的任务管理器中就会显示出来,有什么办法可以知道这个进程是否已经启动吗?
      

  3.   

    不行呀,我的主程序可以知道这个COM是否为Nothing,但是我这个Com也是个单独的程序,如果它已经启动了,在主程序中怎么知道呢?例如Notes里的邮件系统,我可以单独开着它,等启动Notes后,我再启动邮件,就不会出现两个邮件系统。我怎样解决这个问题呢?
      

  4.   

    (1)如果真的任何时候只使用一个实例话,就照wqb(啊喂)说的做。
    (2)如果的确要存在多次使用同一组件情况的话,只是生成多个实例,一般不会影响你的系统,完了后注意Set Nothing。如果是COM+,请注意事务控制,比较烦。 
      

  5.   

    告诉你两种种方法
    1.因为 模块都生成ActiveX EXE方式,所以在COM中可以用 app.previnstance 判断是否已经
    2.给自己的com 添加一个 count 计数器第一种 直接简单
    第二种 模块都生成ActiveX EXE 所以计数器最好放在 com 外面 用 byref 方式传递
          放在 com 内部很麻烦
      

  6.   

    FindWindow 返回不能确定,我的方法,你没试吗?
      

  7.   

    算了算了,还没有搞定。
    (1)API中大概有对EXE文件的获得的函数,查MSDN;
    (2)纯VB法:建立一张表,
                 在你COM的Class_Initialize中写入此COM使用记录。
                 在你COM的Class_Terminate中删除对应此COM使用记录。
         其它地方再使用此COM的时候就检查此表,OK?
                              
      

  8.   


    1.在activex exe中加一个sub main,在其当中用 app.previnstance 判断是否已经运行了
    如果运行了就引发一个自定义错误,然后退出。在调用程序如果捕获到该错误,说明该exe已经运行,直接申明其中对象的实例就行了。或者2.将Instancing 属性做成 GlobalMultiUse,在调用程序的程序开始sub main就启动
    然后,在剩下的地方直接申明其中的对象就行了