등록하려면 어떻게 해야합니까 ?
모든 AcitveX 컨트롤은 자신을 레지스트리에 등록하기위한 목적으로 DllRegisterServer라는
함수를 갖고 있습니다.
ActiveX 컨트롤을 메모리로 로드한 다음에 이 함수를 불러주면 원하는 일을 수행할 수 있습니다.
반대로 ActiveX 컨트롤을 레지스트리에서 제거하기 위한 용도로 DllUnRegisterServer라는
함수도 존재합니다.
// ==============================================================
// RegisterOCX 지정된 ActiveX 컨트롤을 레지스트리에 등록한다.
// --------------------------------------------------------------
// LPSTR pszString 등록하고자 하는 ActiveX 컨트롤의 절대 경로명
// ==============================================================
BOOL WINAPI RegisterOCX(LPSTR pszString)
{
int iReturn = 0;
HRESULT (STDAPICALLTYPE * lpDllEntryPoint)();
HINSTANCE hLib;
// OLE 라이브러리를 초기화한다.
if (FAILED(OleInitialize(NULL)))
{
MessageBox(GetFocus(), "OLE 초기화 실패", "에러", MB_OK);
return FALSE;
}
// 지정된 activeX 컨트롤을 메모리로 로드한다.
hLib = LoadLibrary(pszString);
if (hLib <= NULL)
{
MessageBox(GetFocus(), "파일을 로드하는데 실패했습니다.", "에러", MB_OK);
OleUninitialize();
return FALSE;
}
// "DllRegisterServer" 함수의 위치를 찾는다.
lpDllEntryPoint = (long (__stdcall *)(void))GetProcAddress(hLib, "DllRegisterServer");
// 이 함수를 호출합니다.
if (lpDllEntryPoint)
{
if (FAILED((*lpDllEntryPoint)()))
{
DWORD dwRet;
char szTemp[128];
dwRet = GetLastError();
wsprintf(szTemp, "에러 번호 : %lx", dwRet);
MessageBox(GetFocus(), szTemp, "DllRegisterServer 에러", MB_OK);
FreeLibrary(hLib);
OleUninitialize();
return FALSE;
}
}
else
{
MessageBox(GetFocus(), "DllRegisterServer를 찾을 수 없습니다.", "에러", MB_OK);
FreeLibrary(hLib);
OleUninitialize();
return FALSE;
}
FreeLibrary(hLib);
OleUninitialize();
return TRUE;
}
댓글 없음:
댓글 쓰기