一个动态链接库,假设是ActiveX控件吧,希望只能被调用一次,有多少方法可以实现,最简单的方法是什么?

解决方案 »

  1.   

    在共享代码段里使用一个BOOL变量,进行互斥
      

  2.   

    那个,这个,对DLL实在不是很熟悉,共享代码段在哪里啊?
      

  3.   

    这里,先就写注册表和写文件的提个醒,这种方法得首先保证你的程序不会中途中断,包括停电等等外部故障,否则,你下次启动将会一次都无法调用了,
    其实基本的方法都在共享内存上,我其实是想知道,那个一般的ActiveX不是都有一个m_nRef吗?有没有什么方法可以得到这个Ref,这样我不是就能知道有多少程序在调用我的DLL了吗?
      

  4.   

    在你调用的地方加上BOOL型变量,加载了设置为TRUE,否则为FALSE,如果再加载先判断一下如果变量为TRUE,则不再加载
      

  5.   

    加bool变量是不行的,因为每个副本加载不会共享这个变量,所以无效,简单的方式是建立一个具名的内核对象,什么都行,比如event, mutex, ....,常用的大多用mutex
    HANDLE mymutex = CreateMutex(NULL,TRUE, "my activex");
    if(ERROR_ALREADY_EXISTS == ::GetLastError())///说明已经被调用了一次
    {
        exit(0);
    }
     
      

  6.   

    在dll中设置一个静态变量,启动时进行判断是否大于1,若大于1则退出,否则该静态变量加1。
      

  7.   

    checkyvc6(checkyvc6) 说的不是很详细,但用共享内存肯定是可以的,就是好象复杂了些吧victor_cui(夕阳) 的方法应该是可以用的,就是不知道有没有更简单的,呵呵
      

  8.   

    共享段做个变量写注册表项或者写.ini
      

  9.   

    victor_cui(夕阳) 说得对,这可能是最常用的一种办法了,也是最简单的一种办法了。