在MFC 的EXE程序中,我知道用在InitInstance中可以初始化AfxOleInit()
但是在扩展DLL中,在哪里初始化呢?

解决方案 »

  1.   


    我在DllMain中初始化了AfxOleInit(),但是,当使用
    HRESULT hr=m_connection.CreateInstance(__uuidof(Connection));时
    结果,hr!=0,请问是什么原因
      

  2.   

    (1)在DLL工程的ClassView视图中选中"工程名称App"类,右击选择“Add Virtual Function”菜单;
    (2)在打开的对话框中选择 InitInstance 函数,添加到工程代码中;
    (3)然后再函数中添加 AfxOleInit()即可。
      

  3.   


    比较笨,没有理解:"工程名称App"类,我是在vc6下建立的MFC扩展DLL,没有找到相应的类啊?
      

  4.   

    扩展DLL的话就夹在DllMain里,刚才说的方法是常规DLL中添加的方式
      

  5.   


    "扩展DLL的话就夹在DllMain里,刚才说的方法是常规DLL中添加的方式"???我在DllMain里面加入了AfxOleInit();在 stdafx.h里也添加了:
    #pragma warning(disable:4146) 
    #import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF") 
    #pragma warning(default:4146) 
    using namespace ADODB;但是,当 HRESULT hr=m_connection.CreateInstance(__uuidof(Connection));时hr仍然!=0
    请问是什么原因?
      

  6.   


    对于常规dll和扩展DLL的说明你可以看下介绍这部分内容的书。对于HRESULT 返回不同的值有很多中情况,你可以参考MSDN,对于返回结果你可以用 if (SUCCEEDED(hr))来判断下,返回TRUE,则说明对象创建成功了
      

  7.   


    代码可否发到我邮箱[email protected]帮你看下!
      

  8.   


    谢谢,我把AfxOleInit() 换成: CoInitialize(NULL);了之后,hr=0了,
    但是扩展的DLL请问在哪里CoUninitialize();?
      

  9.   

    你的m_connection应该是哪个类的成员变量吧,可以把CoInitialize和CoUninitialize放到你相应类的合适地方使用,这对函数与AfxOleInit不同,可以调用多次,而AfxOleInit函数在一个工程中只能调用一次,具体可以Google上查下二者的区别。
      

  10.   

    不要在DLL中初始化COM。如果你对COM进行了初始化,调用者在调用了你的DLL无法初始化线程套间。
    你应该编写你的DLL文档通知调用者你的DLL调用之前需要初始化COM。