一个用VC 6.0 Wizard创建MFC XX1.dll,我在XX1.dll中的一个函数里调用CoInitialize()总是失败。 
我将CoInitialize换成CoInitializeEx(..),build,VC6.0提示CoInitializeEx没有声明(Undeclare Identifier),尽管我已经在调用CoInitializeEx函数的.cpp文件中,#include <objbase.h>了。《COM技术内幕》中相关信息:由于对每一个进程,COM库只需初始化一次,并且由于COM库是用于创建组件的,因此进程中组件无需初始化COM库。COM库的初始化一般只是在EXE中进行,而在DLL中则无需进行。如果我在DLL中不调用CoInitialize,会不会带来问题?(如果调用此DLL的EXE也不调用CoInitialize)

解决方案 »

  1.   

    一般不要在dll里调用CoInitialize
    如果应用程序也没调用CoInitialize,则在调用com操作时回失败
      

  2.   

    您的意思是调用CoCreateInstance时会失败?
      

  3.   

    在dll中可以调用 CoInitialize得
      

  4.   

    恩,你们有没有好的办法去检测一个EXE中的所有线程调用的CoInitialize(Ex) 与CoUnInitialize()是否配对, 因为实际工程中的EXE的线程数有好几个, 并且CoInitialize(Ex) 有可能在各个函数中调用的(多人共同开发)。