当一个进程调用DLL的函数后,把它的进程ID由DLL记录下来,在判断时直接打开这个进程,如果打开出错就是已经结束了(也有可能是其它错误)。

解决方案 »

  1.   

    如果调用该DLL的程序非正常关闭,那么如果该DLL没有获得执行的权利,它是不可能知道的(因为没有运行)。如果可以由系统定时调用这个DLL那还差不多,不过,DLL能接收消息吗?
      

  2.   

    我有一個設想,
    可否在DLL中增加一個變量,保留最近調用該DLL的時間,超過一定時間范圍
    就認為應用程式已經關閉.不知道該方法是否可行?
      

  3.   

    首先要解决的是如何能够让在调用DLL的程序非正常关闭之后,该DLL能够获得执行的权利。有一个方法,在DllMain中建立一个进程,该进程定时调用该DLL的某个函数。
      

  4.   

    如此以來,dllmain 中建立的進程就需要時刻監視,
    會不會對性能有較大的影響呢?
      

  5.   

    不会,可以设置每隔一秒或者更长让DLL中的监视函数执行一次,我想在现在的CPU上可能增加的负担不会有明显的变化(CPU占用应该<1%)
      

  6.   

    但是如果該DLL為多人使用,開10個就會占用10%
    更多就更糟糕了!?
      

  7.   

    不会,这个进程只启动一次。也就是说不管有多少进程调用该DLL,但做为定时监视的进程只需要一个。明白吗?
      

  8.   

    不對呀,DLL和調用的進程在一個進程空間中,
    如果多個進程調用該DLL,則會出現多個DLL對象,
    作為監視的線程就會造成資源的浪費吧?
      

  9.   

    我倒!DLL是共用代码的,即使像你说的那样,你不会在监视进程的启动中写上判断是否已经有一个实例在运行(方法有很多!!!),如果有就退出,或者在DLL中判断是否已经存在监视进程。