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