VC6基于ATL的服务程序在编译到Performing registration就弹出访问违规,程序就挂掉了跟踪进去发现程序挂在
Interface* m_pInterface; // Releases only if the interface is not null.
 // The interface is not set to NULL.
 //
 void _Release() throw()
 {
  if (m_pInterface != NULL) {
   m_pInterface->Release();
  }
在网上找了不少资料,好像是应为COM初始化后在释放的时候访问违规了,还是百思不得其解!希望牛人们帮帮忙,小弟非常感谢

解决方案 »

  1.   

    是不是前面已经释放过了,而未置成NULL?
      

  2.   

    void _Release() throw() 

      if (m_pInterface != NULL) { 
      m_pInterface->Release(); 
      } 是TAL 的COMIP.H中的代码,程序阻碍编译的时候直接接弹出反问违规了。并没有执行!我对ATL编写服务程序不是很了解。
      

  3.   

    应该是权限问题,是不是机器上有UAC
    用管理员权限启动VC6
    试试
      

  4.   

    自己解决了,问题出在多次释放COM库,因为在代码中有一个类的全局对象,所以在编译的时候调用了类的构造函数,在构造函数中有调用了COM 的初始化。由于代码中没有检测到其中的一个XML处理的错误问题,导致COM多次释放!
    还是感谢大家的回帖。