那位朋友帮可以告诉我CoInitialize()和AfxOleInit()都是初始化COM库,可它们有什么不同吗?

时间:2022-07-20 17:28:35
(1)CoInitialize()和AfxOleInit()都是初始化COM,可它们有什么不同吗?
  (3)我只知道初始化COM,但到底是初始化了些什么呢,有什么用?
  (2)另外如果我在App类的InitInstance()中用了CoInitialize(),该在那里用CoUninitialize()?如果用AfxOleInit(),需不需要在最后释放或者清理什么呢?
    Any help would be appreciate

8 个解决方案

#1


我记得在《深入浅出ATL》中说明了这两个函数的区别

#2


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()。

#3


pcman1990(pcman):
   用了CoInitialize(),是不是一定需调用CoUninitialize(),如果是该在那里调用?
   同样如果用AfxOleInit()呢?

#4


pcman1990(pcman) :
   如果用了CoInitialize(),是不是一定要用CoUninitialize(),如果是该在那里用呢??
   如果是AfxOleInit(),又怎样呢?

#5


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

#6


Put the CoUninitialize() in 

CWinApp::ExitInstance(..)

#7


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

#8


让小弟回去琢磨琢磨!!

#1


我记得在《深入浅出ATL》中说明了这两个函数的区别

#2


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()。

#3


pcman1990(pcman):
   用了CoInitialize(),是不是一定需调用CoUninitialize(),如果是该在那里调用?
   同样如果用AfxOleInit()呢?

#4


pcman1990(pcman) :
   如果用了CoInitialize(),是不是一定要用CoUninitialize(),如果是该在那里用呢??
   如果是AfxOleInit(),又怎样呢?

#5


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

#6


Put the CoUninitialize() in 

CWinApp::ExitInstance(..)

#7


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

#8


让小弟回去琢磨琢磨!!