我定义了一个全局变量,该对象析构函数会调用一个动态加载的dll中的方法。结果导致进程退出时非法操作。我猜想可能是系统在析构全局变量之前卸载了dll导致的,不知是不是这样?若是有没有办法使dll后于全局变量析构?

解决方案 »

  1.   

    那就不要在析构函数中调用dll,在CWinApp继承的类的ExitInstance中调用全局变量的一个函数,该函数负责调用动态加载的dll中的方法
      

  2.   

    我猜想可能是系统在析构全局变量之前卸载了dll导致的,不知是不是这样?很有可能 如楼上的 就是在程序最后的退出点写了。。
      

  3.   

    在析构全局变量之前卸载了dll
      

  4.   

    有办法,参见《Windows核心编程》,作者遇到过同样的问题。这里我提出两种解决办法,一种是重载App的ExitInstance函数,在里面调用该全局类的析构函数;另一种是挂接FreeLibrary这个API函数,当发现要Free这个Dll的时候,先调用该全局类的析构函数。
      

  5.   

    补充一下,核心编程可以参考第22章,作者有详尽的解决方法;不过我建议重载App的ExitInstance,别轻易使用API Hook。