다음을 통해 공유


OLE 컨트롤 등록

다른 OLE 서버 개체와 마찬가지로 OLE 컨트롤은 다른 OLE 인식 애플리케이션에서 액세스할 수 있습니다. 이 작업은 컨트롤의 형식 라이브러리 및 클래스를 등록하여 수행됩니다.

다음 함수를 사용하면 Windows 등록 데이터베이스에서 컨트롤의 클래스, 속성 페이지 및 형식 라이브러리를 추가하고 제거할 수 있습니다.

OLE 컨트롤 등록

속성 설명
AfxOleRegisterControlClass 등록 데이터베이스에 컨트롤의 클래스를 추가합니다.
AfxOleRegisterPropertyPageClass 등록 데이터베이스에 컨트롤 속성 페이지를 추가합니다.
AfxOleRegisterTypeLib 컨트롤의 형식 라이브러리를 등록 데이터베이스에 추가합니다.
AfxOleUnregisterClass 등록 데이터베이스에서 컨트롤 클래스 또는 속성 페이지 클래스를 제거합니다.
AfxOleUnregisterTypeLib 등록 데이터베이스에서 컨트롤의 형식 라이브러리를 제거합니다.

AfxOleRegisterTypeLib 는 일반적으로 컨트롤 DLL의 구현에서 호출됩니다 DllRegisterServer. 마찬가지로 , AfxOleUnregisterTypeLib 에 의해 DllUnregisterServer호출됩니다. AfxOleRegisterControlClassAfxOleRegisterPropertyPageClassAfxOleUnregisterClass 일반적으로 컨트롤의 클래스 팩터리 또는 속성 페이지의 멤버 함수에 의해 UpdateRegistry 호출됩니다.

AfxOleRegisterControlClass

Windows 등록 데이터베이스에 컨트롤 클래스를 등록합니다.

BOOL AFXAPI AfxOleRegisterControlClass(
    HINSTANCE hInstance,
    REFCLSID clsid,
    LPCTSTR pszProgID,
    UINT idTypeName,
    UINT idBitmap,
    int nRegFlags,
    DWORD dwMiscStatus,
    REFGUID tlid,
    WORD wVerMajor,
    WORD wVerMinor);

매개 변수

hInstance
컨트롤 클래스와 연결된 모듈의 인스턴스 핸들입니다.

clsid
컨트롤의 고유 클래스 ID입니다.

pszProgID
컨트롤의 고유 프로그램 ID입니다.

idTypeName
컨트롤에 대한 사용자가 읽을 수 있는 형식 이름을 포함하는 문자열의 리소스 ID입니다.

idBitmap
도구 모음 또는 팔레트에서 OLE 컨트롤을 나타내는 데 사용되는 비트맵의 리소스 ID입니다.

nRegFlags
다음 플래그 중 하나 이상을 포함합니다.

  • afxRegInsertable OLE 개체에 대한 개체 삽입 대화 상자에 컨트롤을 표시할 수 있습니다.

  • afxRegApartmentThreading 레지스트리의 스레딩 모델을 ThreadingModel=Apartment로 설정합니다.

  • afxRegFreeThreading 레지스트리의 스레딩 모델을 ThreadingModel=Free로 설정합니다.

    두 플래그 afxRegApartmentThreading 를 결합하고 afxRegFreeThreading ThreadingModel=Both를 설정할 수 있습니다. 스레딩 모델 등록에 대한 자세한 내용은 Windows SDK의 InprocServer32를 참조하세요.

참고 항목

MFC 4.2 int 이전의 MFC 버전에서 nRegFlags 매개 변수는 개체 삽입 대화 상자에서 컨트롤을 삽입할 수 있도록 허용하거나 허용하지 않는 BOOL 매개 변수 인 bInsertable이었습니다.

dwMiscStatus
다음 상태 플래그 중 하나 이상을 포함합니다(플래그에 대한 설명은 Windows SDK의 OLEMISC 열거형 참조).

  • OLEMISC_RECOMPOSEONRESIZE

  • OLEMISC_ONLYICONIC

  • OLEMISC_INSERTNOTREPLACE

  • OLEMISC_STATIC

  • OLEMISC_CANTLINKINSIDE

  • OLEMISC_CANLINKBYOLE1

  • OLEMISC_ISLINKOBJECT

  • OLEMISC_INSIDEOUT

  • OLEMISC_ACTIVATEWHENVISIBLE

  • OLEMISC_RENDERINGISDEVICEINDEPENDENT

  • OLEMISC_INVISIBLEATRUNTIME

  • OLEMISC_ALWAYSRUN

  • OLEMISC_ACTSLIKEBUTTON

  • OLEMISC_ACTSLIKELABEL

  • OLEMISC_NOUIACTIVATE

  • OLEMISC_ALIGNABLE

  • OLEMISC_IMEMODE

  • OLEMISC_SIMPLEFRAME

  • OLEMISC_SETCLIENTSITEFIRST

tlid
컨트롤 클래스의 고유 ID입니다.

wVerMajor
컨트롤 클래스의 주 버전 번호입니다.

wVerMinor
컨트롤 클래스의 부 버전 번호입니다.

Return Value

컨트롤 클래스가 등록된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

이렇게 하면 OLE 컨트롤을 인식하는 컨테이너에서 컨트롤을 사용할 수 있습니다. AfxOleRegisterControlClass 는 레지스트리를 시스템의 컨트롤 이름과 위치로 업데이트하고 레지스트리에서 컨트롤이 지원하는 스레딩 모델도 설정합니다. 자세한 내용은 Technical Note 64, "OLE 컨트롤의 아파트 모델 스레딩" 및 Windows SDK의 프로세스 및 스레드 정보를 참조하세요.

예시

// Member function implementation of class COleObjectFactory::UpdateRegistry
//
BOOL CMyAxCtrl::CMyAxCtrlFactory::UpdateRegistry(BOOL bRegister)
{
   // TODO: Verify that your control follows apartment-model threading rules.
   // Refer to MFC TechNote 64 for more information.
   // If your control does not conform to the apartment-model rules, then
   // you must modify the code below, changing the 6th parameter from
   // afxRegInsertable | afxRegApartmentThreading to afxRegInsertable.

   if (bRegister)
      return AfxOleRegisterControlClass(
          AfxGetInstanceHandle(),
          m_clsid,
          m_lpszProgID,
          IDS_NVC_MFCAXCTL,
          IDB_NVC_MFCAXCTL,
          afxRegInsertable | afxRegApartmentThreading,
          _dwMyOleMisc,
          _tlid,
          _wVerMajor,
          _wVerMinor);
   else
      return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
}

위의 예제에서는 삽입 가능한 플래그와 아파트 모델 ORed의 플래그를 함께 사용하여 여섯 번째 매개 변수를 만드는 방법을 AfxOleRegisterControlClass 보여 줍니다.

afxRegInsertable | afxRegApartmentThreading,

컨트롤이 활성화된 컨테이너에 대한 개체 삽입 대화 상자에 표시되고 아파트 모델 인식이 됩니다. 아파트 모델 인식 컨트롤은 고정 클래스 데이터가 잠금으로 보호되도록 해야 한 아파트의 컨트롤이 정적 데이터에 액세스하는 동안 스케줄러가 이 데이터를 사용하지 않도록 설정하지 않고 동일한 클래스의 다른 인스턴스가 동일한 정적 데이터를 사용하기 시작합니다. 정적 데이터에 대한 모든 액세스는 중요한 섹션 코드로 둘러싸입니다.

요구 사항

헤더 afxctl.h

AfxOleRegisterPropertyPageClass

Windows 등록 데이터베이스에 속성 페이지 클래스를 등록합니다.

BOOL AFXAPI AfxOleRegisterPropertyPageClass(
   HINSTANCE hInstance,
   REFCLSID  clsid,
   UINT idTypeName,
   int nRegFlags);

매개 변수

hInstance
속성 페이지 클래스와 연결된 모듈의 인스턴스 핸들입니다.

clsid
속성 페이지의 고유 클래스 ID입니다.

idTypeName
속성 페이지의 사용자가 읽을 수 있는 이름을 포함하는 문자열의 리소스 ID입니다.

nRegFlags
플래그를 포함할 수 있습니다.

  • afxRegApartmentThreading 레지스트리의 스레딩 모델을 ThreadingModel = Apartment로 설정합니다.

참고 항목

MFC 4.2 int 이전의 MFC 버전에서는 nRegFlags 매개 변수를 사용할 수 없습니다. 또한 플래그는 afxRegInsertable 속성 페이지에 유효한 옵션이 아니며 설정된 경우 MFC에서 ASSERT가 발생합니다.

Return Value

컨트롤 클래스가 등록된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

이렇게 하면 OLE 제어를 인식하는 컨테이너에서 속성 페이지를 사용할 수 있습니다. AfxOleRegisterPropertyPageClass 는 레지스트리를 시스템의 속성 페이지 이름 및 해당 위치로 업데이트하고 레지스트리에서 컨트롤이 지원하는 스레딩 모델도 설정합니다. 자세한 내용은 Technical Note 64, "OLE 컨트롤의 아파트 모델 스레딩" 및 Windows SDK의 프로세스 및 스레드 정보를 참조하세요.

요구 사항

헤더 afxctl.h

AfxOleRegisterTypeLib

Windows 등록 데이터베이스에 형식 라이브러리를 등록하고 OLE 컨트롤을 인식하는 다른 컨테이너에서 형식 라이브러리를 사용할 수 있도록 허용합니다.

BOOL AfxOleRegisterTypeLib(
    HINSTANCE hInstance,
    REFGUID tlid,
    LPCTSTR pszFileName = NULL,
    LPCTSTR pszHelpDir  = NULL);

매개 변수

hInstance
형식 라이브러리와 연결된 애플리케이션의 인스턴스 핸들입니다.

tlid
형식 라이브러리의 고유 ID입니다.

pszFileName
컨트롤에 대해 지역화된 형식 라이브러리(.TLB) 파일의 선택적인 파일 이름을 가리킵니다.

pszHelpDir
형식 라이브러리에 대한 도움말 파일을 찾을 수 있는 디렉터리의 이름입니다. NULL인 경우 도움말 파일은 형식 라이브러리 자체와 동일한 디렉터리에 있는 것으로 간주됩니다.

Return Value

형식 라이브러리가 등록된 경우 0이 아닌 값이고, 그렇지 않으면 0입니다.

설명

이 함수는 시스템에서 레지스트리를 형식 라이브러리 이름 및 해당 위치로 업데이트합니다.

예시

// Type library guid definition.
const GUID CDECL BASED_CODE _tlid =
{ 0x77E58ED8, 0xA2C0, 0x4C13, { 0xB6, 0xC1, 0xBA, 0xD1, 0x19, 0xAF, 0xE3, 0xF1 } };

 

// Registers type library and the interfaces
// in it, afxctl.h needs to be included
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid))
return ResultFromScode(SELFREG_E_TYPELIB);


// CMFCAutomation.tlb should be in the same directory as exe module.
// last param can be null if help file associated w/ tlb is in same dir as .tlb
if (!AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid,
   _T("CMFCAutomation.tlb"), NULL))
{
   return ResultFromScode(SELFREG_E_TYPELIB);
}

요구 사항

헤더 afxdisp.h

AfxOleUnregisterClass

Windows 등록 데이터베이스에서 컨트롤 또는 속성 페이지 클래스 항목을 제거합니다.

BOOL AFXAPI AfxOleUnregisterClass(REFCLSID clsID, LPCSTR pszProgID);

매개 변수

clsID
컨트롤 또는 속성 페이지의 고유 클래스 ID입니다.

pszProgID
컨트롤 또는 속성 페이지의 고유한 프로그램 ID입니다.

Return Value

컨트롤 또는 속성 페이지 클래스의 등록이 성공적으로 취소된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

요구 사항

헤더 afxctl.h

AfxOleUnregisterTypeLib

이 함수를 호출하여 Windows 등록 데이터베이스에서 형식 라이브러리 항목을 제거합니다.

BOOL AFXAPI AfxOleUnregisterTypeLib(REFGUID tlID);

매개 변수

tlID
형식 라이브러리의 고유 ID입니다.

Return Value

형식 라이브러리의 등록이 성공적으로 취소된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

예시

// Type library GUID, corresponds to the uuid attribute of the library
// section in the .odl file.
const GUID CDECL BASED_CODE _tlid =
    {0xA44774E8, 0xAE00, 0x451F, {0x96, 0x1D, 0xC7, 0xD2, 0xD2, 0x58, 0xA0, 0x75}};

// Type library major version number, number on the left of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMajor = 1;

// Type library minor version number, number on the right of decimal
// point, in version attribute of the library section in .odl file.
const WORD _wVerMinor = 0;

STDAPI DllUnregisterServer(void)
{
   AFX_MANAGE_STATE(_afxModuleAddrThis);

   if (!AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor))
      return ResultFromScode(SELFREG_E_TYPELIB);

   if (!COleObjectFactoryEx::UpdateRegistryAll(FALSE))
      return ResultFromScode(SELFREG_E_CLASS);

   return NOERROR;
}

요구 사항

헤더 afxdisp.h

참고 항목

매크로 및 전역