我用VC自带的OLE/COM Object Viewer工具来查看机器上注册的对象,发现有些机器上的"Document Objects"里面的"Microsoft Word文档"对象是完整的,点击它左侧的[+]可以展开它的结构,看到里面的接口如"_Document"等;而有些机器上该对象似乎不完整甚至是根本没有注册进去,点击左侧的[+]会报警说该对象不可用。这两种机器使用word的时候都是正常的,但是用ole的方式内嵌word文档的时候就看出不同来,前者很正常,后者则提示“对象创建失败,请确认该对象已经注册入系统”。如果形成这两种机器的差别我是想知道的,但是我现在更想知道如何解决这个问题,如何为那些没有成功注册word文档对象的机器重新注册word文档对象?请指教。

解决方案 »

  1.   

    注册某些带有自注册功能控件或组件的方法, 希望对你有用
    //////////////////////////////////////////////
    // 函数:RegActiveXControl
    // 说明:注册ActiveX控件
    // 参数:pstrFileName —— 文件名称
    // 返回:是则返回TRUE,否则返回FALSE
    //////////////////////////////////////////////
    BOOL CBSUploadStationApp::RegActiveXControl( LPCTSTR pstrFileName )
    {
    HINSTANCE hLibrary;
    FARPROC lpfnDllEntryPoint;
    BOOL bRet; try
    {
    // 使系统不显示严重的错误句柄信息框,
    // 系统向当前进程发送错误信息
    // 用以保证LoadLibraryEx fails.
    SetErrorMode( SEM_FAILCRITICALERRORS ); // 打开库文件
    hLibrary = LoadLibraryEx( pstrFileName, NULL, 
                                        LOAD_WITH_ALTERED_SEARCH_PATH );
    if( hLibrary == NULL )
    AfxThrowUserException(); // 获取注册函数地址
    lpfnDllEntryPoint = GetProcAddress( hLibrary, "DllRegisterServer" ); 
    if( lpfnDllEntryPoint == NULL )
    AfxThrowUserException(); // 调用注册函数
    if( FAILED( (*lpfnDllEntryPoint)() ) )
    AfxThrowUserException(); bRet = TRUE;
    }
    catch( ... )
    {
    bRet = FALSE;
    } // 关闭库文件
    if( hLibrary )
    FreeLibrary( hLibrary ); return bRet;
    }