一:问题描述:
1:封装了一个ocx名字为first.ocx;
2:别人在调用first.ocx封装了另一个ocx名字为second.ocx;
3:使用second.ocx时,卸载有时会报错;
二:调试结果:
1:vc下调试发现,加载顺序是先second.ocx,再加载first.ocx;卸载顺序不确定;
2:场景:
(1):不报错的场景:先卸载second.ocx,再卸载first.ocx;
(2):报错的场景:先卸载first.ocx,再卸载second.ocx时访问非法内存,报错,死循环;
3:补充:
我现在负责的部分是开放first.ocx的。second.ocx中只含有first.ocx内容时,也会出现上面的问题。
三:问题:
有什么办法可以指定卸载顺序,或者其他的处理方法?

解决方案 »

  1.   

    first.ocx有没有提供Terminate()接口?
      

  2.   

    first.ocx先卸载,再卸载second.ocx就会报错,访问非法内存;
      

  3.   

    这种情况,应该让封装second.ocx的人去解决
    貌似first.ocx改成dll会好点
      

  4.   

    在他那边释放(调用ondestroy或者onclose函数时),first.ocx已经卸载了,再卸载他的ocx就报访问非法内存了。
      

  5.   

    卸载?在DllUnregisterServer中处理一下
      

  6.   

    是不是卸载second.ocx时使用了first.ocx中的某些接口了
      

  7.   

    应该没有,second.ocx里就是一对话框,包含first.ocx的界面,里面没有其他代码。
      

  8.   

    改成dll以后,卸载顺序是先second.ocx,再是first.ocx了,不过还是会报错,一些系统只带的dll会卸载不了。另外补充下,first.ocx是在vc开发的,second.ocx是在dephi开发的。
      

  9.   

    这个我也关注下,看看大牛意见我一贯做法first.ocx封成first.dll second.ocx掉first.dll