AfxOleInit

来源:互联网 发布:linux ftp 用户 编辑:程序博客网 时间:2024/06/07 06:37
AfxOleInit

初始化 OLE 为应用程序的支持。

BOOL AFXAPI AfxOleInit( );
返回值

非零,如果成功;0,如果初始化失败,可能,因为安装该 OLE 系统 DLL 的错误版本。

备注

调用此函数初始化 OLE 为 MFC 应用程序的支持。 当调用该函数时时,将发生以下操作:

  • 初始化调用应用程序的当前单元 COM 库。 有关更多信息,请参见 OleInitialize。

  • 创建消息筛选器对象, IMessageFilter 实现接口。 此消息筛选器可捕获与调用 AfxOleGetMessageFilter。

如果 AfxOleInit 从 MFC DLL 调用,则调用将失败。 该失败,因为该函数,假设,则为; 如果从 DLL 调用,该 OLE 系统由调用应用程序之前初始化。

 

必须初始化 MFC 应用程序设置为单线程单元。 (STA) 如果对您的 InitInstance 重写的 CoInitializeEx ,请指定 COINIT_APARTMENTTHREADED (而不是 COINIT_MULTITHREADED)。

 AfxOleInit()与CoInitialize(NULL)的区别

OLE是建立在COM之上的技术,层次比COM要高。AfxOleInit()调用的是OleInitialize(),而OleInitialize()除了调用CoInitializeEx()来初始化COM库外,还进行一些其它的操作,这些操作对OLE应用来说是必须的,这些OLE应用包括:  
  (1)Clipboard;  
  (2)Drag   and   drop;  
  (3)Object   linking   and   embedding(现在的OLE,已不再仅仅是Object   linking   and   embedding的概念);  
  (4)In-place   activation;  
  与AfxOleInit()对应的是,AfxOleTerm()。   

    CoInitialize和CoUninitialize必须成对使用,后者不必。

     AfxOleInit()和AfxOleTerm()其实也是需要成对的,但是,在你的程序中,AfxOleTerm()可以不出现,这是因为,MFC已经帮你做好了(有兴趣的话,你可以仔细研究一下CWinThread::m_lpfnOleTermOrFreeLib,而CWinApp是从CWinThread继承的)。

原创粉丝点击