OLE 컨트롤 등록 오류가 발생할 수 있는 원인

기술 자료 번역 기술 자료 번역
기술 자료: 140346 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

CDK(Control Development Kit)에서 제공하는 Test Container의 Tools 메뉴에서 Visual C++를 사용하거나 Visual C++에서 제공하는 regsvr 또는 regsvr32 응용 프로그램을 사용하여 OLE 컨트롤을 등록할 수 있습니다. 경우에 따라 컨트롤 등록이 실패할 수 있으며, 이런 경우 이 문서를 사용하여 문제를 해결하십시오.

추가 정보

앞에서 설명한 OLE 컨트롤 등록 방법 모두 기본적으로 같은 기법을 사용합니다. LoadLibrary()가 컨트롤을 메모리로 로드하기 위해 호출되고, GetProcAddress()가 DllRegisterServer() 함수의 주소를 얻기 위해 호출된 다음 DllRegisterServer()가 컨트롤을 등록하기 위해 호출됩니다.

컨트롤 등록이 실패하는 원인

  • 하나 이상의 필요한 OLE DLL이 경로에 없습니다. OLE 컨트롤을 배포하는 지침과 포함시켜야 하는 DLL이 무엇인지에 대한 설명은 CDK와 같은 디렉터리에 있는 Shipctrl.wri 파일에서 찾을 수 있습니다.
  • 컨트롤이 OLE DLL 이외의 DLL을 로드하는데 해당 DLL이 경로에 없습니다. 컨트롤을 메모리에 로드하면 라이브러리 가져오기를 통해 암시적으로 로드된 DLL도 로드됩니다. 이러한 DLL이 경로에 없는 경우 컨트롤이 로드되지 않으므로 등록이 실패합니다.
  • 하나 이상의 DLL이 잘못된 버전일 수 있습니다. 컴퓨터에 설치되어 있는 DLL보다 최신 버전의 DLL을 사용하여 컨트롤을 만든 경우 컨트롤이 제대로 로드되지 않아 등록이 실패합니다.
  • 이전 버전의 Ocd25.lib에 연결되어 있습니다. 컨트롤이 MFC 데이터베이스 클래스를 사용하는 경우 연결 중인 Ocd25.lib 파일 버전에 문제가 있을 수 있습니다.
  • OLE 컨트롤은 Novell 서버의 원격 드라이브에 있습니다. 이 경우 .ocx 파일에 대한 액세스 권한으로 인해 컨트롤이 로드되지 않을 수 있습니다. .ocx 파일에 대한 액세스 권한이 실행 파일의 일반적인 설정인 읽기 전용, 공유 가능한 액세스로 설정되어 있는지 확인하십시오.

문제 해결 방법

오류가 발생할 수 있는 원인에 하나도 해당되지 않는 경우 다음 방법을 시도하십시오.

  1. Visual C++에서 컨트롤 프로젝트를 로드한 상태에서 디버그 세션의 실행 파일을 OLE Control Test Container(Tstcon16.exe 또는 Tstcon32.exe)로 설정합니다. 디버거 아래에서 Test Container를 시작하면 Test Container에 디버그 정보가 포함되어 있지 않다는 경고가 나타납니다. 이 경고는 무시하고 계속합니다.
  2. Test Container에서 컨트롤 등록을 시도합니다. OLE 컨트롤 DLL 또는 종속 DLL의 디버그 출력을 확인합니다. 16비트 제품을 실행하는 경우 디버그 출력을 받도록 DBWIN 프로그램을 실행해야 합니다.

    DLL 디버그 세션의 실행 파일을 설정하는 방법에 대한 자세한 내용은 Books Online의 도움말 항목 "DLL 디버깅(Debugging DLLs)"을 참조하십시오.
다른 방법으로는 프로그래밍 방식으로 컨트롤 등록을 시도할 수 있습니다. 먼저 대화 상자 기반 응용 프로그램과 OLE 자동화를 선택하는 MFC AppWizard 응용 프로그램을 만듭니다. OLE 자동화를 설정하면 OLE가 초기화되어 컨트롤을 등록하는 코드가 제대로 작동합니다. CWinApp 파생 클래스에서 다음과 같은 초기 코드를 사용하여 InitInstance() 함수를 찾습니다.
BOOL CTestregApp::InitInstance()
{

   // Initialize OLE libraries
   if (!AfxOleInit())
   {
      AfxMessageBox(IDP_OLE_INIT_FAILED);
      return FALSE;
   }
				
여기에서 다음 코드 세그먼트를 추가하여 LoadLibrary(), GetProcAddress() 및 DllRegisterServer의 반환 코드를 검사할 수 있도록 합니다.
#ifdef _WIN32
    HINSTANCE hDLL = LoadLibrary("some.ocx");
    if(NULL == hDLL)
    {
        // See Winerror.h for explaination of error code.
        DWORD error = GetLastError();
        TRACE1("LoadLibrary() Failed with: %i\n", error);
        return FALSE;
    }

    typedef HRESULT (CALLBACK *HCRET)(void);
    HCRET lpfnDllRegisterServer;

    lpfnDllRegisterServer =
            (HCRET)GetProcAddress(hDLL, "DllRegisterServer");
    if(NULL == lpfnDllRegisterServer)
    {
        // See Winerror.h for explaination of error code.
        DWORD error = GetLastError();
        TRACE1("GetProcAddress() Failed with %i\n", error);
        return FALSE;
    }

    if(FAILED((*lpfnDllRegisterServer)()))
    {
        TRACE("DLLRegisterServer() Failed");
        return FALSE;
    }

#else // 16-bit
    HINSTANCE hDLL = LoadLibrary("regtest.ocx");
    if(HINSTANCE_ERROR > hDLL)
    {
        // See LoadLibrary() help for explaination of error code.
        TRACE1("LoadLibrary() Failed with: %i\n", hDLL);
        return FALSE;
    }

    typedef HRESULT (CALLBACK *HCRET)(void);
    HCRET lpfnDllRegisterServer;

    lpfnDllRegisterServer =
            (HCRET)GetProcAddress(hDLL, "DllRegisterServer");
    if(NULL == lpfnDllRegisterServer)
    {
        // See GetProcAddress() help for explaination of error code.
        TRACE("GetProcAddress() Failed");
        return FALSE;
    }

    if(FAILED((*lpfnDllRegisterServer)()))
    {
        TRACE("DLLRegisterServer() Failed");
        return FALSE;
    }
#endif
				




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 140346 - 마지막 검토: 2004년 4월 13일 화요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ 1.5 Professional Edition
  • Microsoft Visual C++ 1.51
  • Microsoft Visual C++ 1.52 Professional Edition
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 2.2
  • Microsoft Visual C++ 4.0 Standard Edition
키워드:?
kbcode kbctrl KB140346
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com