如果不准备采取手动注册的方法,而控件程序又不是我们编写的,我们可以在自己的应用程序中用下面的代码来注册ocx控件
其中“pszDllName”是控件的库文件名称,如“Clock.ocx”。
BOOL RegisterOcx(LPCSTR pszDllName)
{
HRESULT (STDAPICALLTYPE * lpDllEntryPoint)(void);
LPCSTR pszDllEntryPoint = "DllRegisterServer";
BOOL bRtn;
if(FAILED(OleInitialize(NULL)))
{
::AfxMessageBox("Ole Initialize failed!");
return FALSE;
}
SetErrorMode(SEM_FAILCRITICALERRORS);
HINSTANCE hLib = LoadLibraryEx(pszDllName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
if(hLib < (HINSTANCE)HINSTANCE_ERROR)
{
::AfxMessageBox("Load Library failed!");
bRtn = FALSE;
goto CleanOle;
}
(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, pszDllEntryPoint);
if(lpDllEntryPoint == NULL)
{
::AfxMessageBox("Failed to find dll entry point!");
bRtn = FALSE;
goto CleanupLobrary;
}
if(FAILED((*lpDllEntryPoint)()))
{
::AfxMessageBox("Failed to call entry point!");
bRtn = FALSE;
goto CleanupLobrary;
}
CleanupLobrary:
FreeLibrary(hLib);
CleanOle:
OleUninitialize();
return bRtn;
}