Share via


전역 인터페이스 테이블 만들기

다음 호출을 사용하여 전역 인터페이스 테이블 개체를 만들고 IGlobalInterfaceTable에 대한 포인터를 가져옵니다.

HRESULT hr;
hr = CoCreateInstance(CLSID_StdGlobalInterfaceTable,
                 NULL,
                 CLSCTX_INPROC_SERVER,
                 IID_IGlobalInterfaceTable,
                 (void **)&gpGIT);
if (hr != S_OK) {
  exit(0); // Handle errors here.
}

참고

이전 호출을 사용하여 전역 인터페이스 테이블 개체를 만들 때 uuid.lib 라이브러리에 연결해야 합니다. 그러면 외부 기호 CLSID_StdGlobalInterfaceTable 및 IID_IGlobalInterfaceTable resolve.

 

프로세스당 전역 인터페이스 테이블의 단일 instance 있으므로 프로세스에서 이 함수에 대한 모든 호출은 동일한 instance 반환합니다.

CoCreateInstance 함수를 호출한 후 RegisterInterfaceInGlobal 메서드를 호출하여 상주하는 아파트의 인터페이스를 등록합니다. 이 메서드는 인터페이스와 해당 위치를 식별하는 쿠키를 제공합니다. 이 인터페이스에 대한 포인터를 찾는 아파트는 이 쿠키를 사용하여 GetInterfaceFromGlobal 메서드를 호출하고 구현은 호출하는 아파트에 대한 인터페이스 포인터를 제공합니다. 인터페이스의 전역 등록을 취소하기 위해 모든 아파트에서 RevokeInterfaceFromGlobal 메서드를 호출할 수 있습니다.

IGlobalInterfaceTable을 사용하는 간단한 예는 STA(단일 스레드 아파트)의 개체에 대한 인터페이스 포인터를 다른 아파트의 작업자 스레드에 전달하려는 경우입니다. 스트림으로 마샬링하고 스트림을 스레드 매개 변수로 작업자 스레드에 전달하는 대신 IGlobalInterfaceTable 을 사용하면 단순히 쿠키를 전달할 수 있습니다.

전역 인터페이스 테이블에 인터페이스를 등록하면 실제 포인터(포인터를 전달해야 할 때마다), 다른 아파트로 이동하는 비메토드 매개 변수(CreateThread를 통해 ThreadProc에 대한 매개 변수로) 또는 아파트 외부에서 액세스할 수 있는 In-process 메모리에 전달하는 대신 사용할 수 있는 쿠키가 제공됩니다.

전역 인터페이스를 사용하면 여러 스레드에서 동시에 글로벌 상태에 액세스하는 것과 관련된 경합 조건 및 상호 배제와 같은 문제를 관리하는 프로그래머에게 추가적인 부담을 주므로 주의가 필요합니다.

COM은 IGlobalInterfaceTable 인터페이스의 표준 구현을 제공합니다. 완전한 스레드로부터 안전한 기능을 제공하기 때문에 이 표준 구현을 사용하는 것이 좋습니다.

전역 인터페이스 테이블을 사용해야 하는 경우