COM 구성 요소 등록

3025 단어 컴퓨터 기반
COM 구성 요소
사용하기 전에 반드시 먼저 등록해야 한다.등록
등록표의 상응하는 위치에 약간의 데이터를 쓰다.이 데이터들은 guid와 Dll의 절대 경로의 일일이 대응할 수 있습니다. 즉, 프로그램이 guid를 통해 Dll의 위치를 찾을 수 있도록 도와줍니다.    
GUID 개념:
      
GUID(globally unique identifier)는 128비트 숫자입니다.모든 인터페이스와 구성 요소가 시간과 공간에서 전 세계에서 유일한 표지부호임을 보장하는 데 쓰인다.공간의 유일성을 확보하기 위해 기계에 설치된 카드의 MAC 주소에 일정한 알고리즘에 따라 생성된 유일한 48비트 값 서열을 추가한다.시간적 유일성을 보장하기 위해 각 GUID 값에는 60개의 타임 스탬프가 있습니다.이 스탬프는 1852년 10월 15일 00:00:00 이후 100나초를 시간 간격으로 하는 계수값을 나타낸다.이렇게 하면 3400년 GUID 값이 여전히 유일하다는 것을 보장할 수 있다.다음은 GUID의 정의와 예입니다.
typedef 
struct
 _GUID {     unsigned 
long
  Data1;     unsigned 
short
 Data2;     unsigned 
short
 Data3;     unsigned 
char
  Data4[
8
]; } GUID;
//
 {364ede61-08ac-43ec-8861-15f5f9f4ced1}
마이크로소프트는 두 개의 GUID를 만드는 프로그램을 제공했는데, 하나는 UUIDGEN이다.EXE, 이 프로그램은 명령행 방식입니다.또 하나는 GUIDGEN입니다.EXE, 예시적인 VC++ 대화상자 응용 프로그램입니다.DEFINE_GUID는 GUIDGEN을 사용할 수 있습니다.EXE를 사용하여 GUID를 생성합니다.레지스트리: 구성 요소는 Windows 레지스트리에 포함된 DLL 파일 이름을 CLSID로 색인할 수 있습니다.CoCreateInstance는 CLSID를 키워드로 사용하여 레지스트리에서 필요한 파일 이름을 찾습니다.등록표는 많은 요소로 구성된 차원 구조다.모든 원소는 하나의 키워드라고 불린다.각 키워드에는 일련의 열 하위 키워드, 일련의 명명된 값 및/또는 명명되지 않은 값이 포함될 수 있습니다.COM은 레지스트리의 분기 하나만 사용: HKEYCLASSES_ROOT;이 키워드 아래에 CLSID 키워드가 표시됩니다.CLSID 키워드 아래에 시스템에 설치된 모든 구성 요소의 CLSID가 있습니다.모든 CLSID 키워드에 대해 우리가 지금 관심을 갖는 것은 단지 그 하위 키워드인 InprocServer32에 불과하다.이 하위 키워드의 기본값은 어셈블리가 있는 Dll 파일 경로 이름입니다.또 다른 하위 키워드인 ProgID는 프로그래머가 CLSID에 지정한 프로그래머의 기억하기 쉬운 이름을 가리킨다.COM 구성 요소를 등록하는 방법: DLL은 구성 요소를 알고 있기 때문에 DLL에서 이 정보를 등록할 수 있습니다.DLL에서는 DllRegisterServer(),//등록 컴포넌트 DllUnRegisterServer 완료();//반등록 구성 요소를 완료한 사용자는 프로그램 REGSVR32를 사용할 수 있습니다.EXE에서 구성 요소를 등록합니다.명령줄:regsvr32/u testDll.dll regsvr32 testDll.dll(등록).전형적인 등록COM 구성 요소인 Dll은 다음과 같은 다섯 가지 함수를 내보내야 한다. 1) DllMain: Dll의 입구 함수로 Dll의 초기화 작업을 완성해야 한다(Directshow는 DllEntryPoint를 실현한다).2) DllGetClassObject: 클래스 플랜트 포인터를 획득하는 데 사용됨;3) DllCanUnloadNow: 시스템이 비어 있을 때 이 함수를 호출하여 Dll을 마운트 해제할 수 있는지 확인합니다.4) DllRegisterServer: COM 구성 요소를 레지스트리에 등록합니다.5) DllUnregisterServer: 레지스트리에서 COM 구성 요소의 등록 정보를 삭제합니다.그래서 등록을 완성하려면 DllRegisterServer()가 관건이다.DllUnRegisterServer();두 함수의 실현은 다음에 이 두 함수를 어떻게 실현하는지 상세하게 소개할 것이다.
//
g_module이 DLL인 인스턴스 핸들
//
CLSID_INNER_COM은 어셈블리의 CLSID입니다.
//
const char g_friend_name_inner [] = "inner_com_test";
//
const char g_ver_indprog_id_inner [] = "inside.com.chapter.7.inner";
//
const char g_prog_id_inner [] = "inside.com.chapter.7.inner.1";
stdAPI DllRegisterServer(
void
) {     HRESULT hr 
=
 RegisterServer(g_module,CLSID_INNER_COM,         g_friend_name_inner,g_ver_indprog_id_inner,g_prog_id_inner);          
return
 hr; }
 
//
Register the component in the registry
HRESULT RegisterServer(HMODULE hModule,                                              
const
 CLSID
&
 clsid,                                              
const
 
char
*
 szFrien

좋은 웹페이지 즐겨찾기