为什么在线程中不能AFXOLEINIT()?那么在什么情况下可以,希望给位讨论讨论~

解决方案 »

  1.   

    可以用,不过必须是用MFC创建的线程.
      

  2.   

    AFXOLEINIT()需要用到mfc对象,线程中需要能访问到
      

  3.   

    AfxBeginThread创建的工作线程可以使用AFXOLEINIT吗?
      

  4.   

    BUG: AfxOleInit Returns TRUE Without Initializing OLE in a DLL
    Article ID : 154320 
    Last Review : December 2, 2003 
    Revision : 1.0 
    This article was previously published under Q154320
    On this Page
     SYMPTOMS 
     CAUSE 
     RESOLUTION 
     STATUS SYMPTOMS
    When you develop a Microsoft Foundation Classes (MFC) regular dynamic link library (DLL), you may want to use object linking and embedding (OLE) without exposing an OLE object, such as displaying a dialog box from within the DLL that contains an OLE control. A failure may occur when you call the DoModal function in the dialog box creation if you used the AfxOleInit or AfxEnableControlContainer function to initialize OLE within the DLL. Typically, this is done by calling the functions in the InitInstance method of the CWinApp derived class. 
    CAUSE
    In a MFC regular DLL, AfxOleInit does not initialize OLE because MFC cannot uninitialize OLE in the DLL_PROCESS_DETACH method of the ExitInstance function. In this case, OLE may already have been unloaded. The decision to not initialize OLE is by design. The bug is that AfxOleInit returns TRUE after setting m_bNeedTerm to -1. According to the Visual C++ documentation, when AfxOleInit returns TRUE this means that OLE was initialized, and that is not the case in a DLL. 
    RESOLUTION
    In order to uninitialize OLE when it is initialized in the DLL, this requires exported methods for initialization and uninitialization that the client has to call because the uninitialization has to occur before the CWinApp::ExitInstance function, which is a part of DLL_PROCESS_DETACH. A better solution is to initialize and uninitialize OLE in the client application. This can be done in MFC by calling AfxOleInit in the application's InitInstance method of the CWinApp derived class. MFC then uninitializes OLE by exiting the application. 
    STATUS
    Microsoft has confirmed this to be a bug in the documentation in the Microsoft products listed at the beginning of this article. 
      

  5.   

    http://support.microsoft.com/default.aspx?scid=kb;en-us;154320
      

  6.   

    谢谢fingerfox,不过我没有说清楚罢了,我的问题是初始化的时候CRASH,就是出现严重的错误