Share via


프록시/스텁에 대한 C-컴파일러 정의

헤더 파일 Rpcproxy.h에는 다음과 같은 매크로 정의가 포함되어 있으며, 각 매크로 정의는 분산 COM 애플리케이션을 빌드할 때 편리할 수 있습니다. 이러한 매크로는 C 컴파일 시간에 /D (또는 -D) 전처리기 스위치를 사용하여 호출됩니다.

MACRO 설명
REGISTER_PROXY_DLL 프록시 DLL을 자동으로 등록하기 위한 DllMain, DllRegisterServerDllUnregisterServer 함수를 생성합니다.
PROXY_CLSID=<clsid> 서버에 대한 클래스 식별자를 지정합니다. 이 매크로가 정의되지 않은 경우 기본 CLSID는 MIDL 컴파일러가 Proxy/Stub 서버의 IDL 사양에서 발생하는 첫 번째 인터페이스 식별자입니다.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} 서버의 클래스 식별자 값을 이진 16진수 형식으로 지정합니다.

 

Dlldata.c를 컴파일할 때 REGISTER_PROXY_DLL 매크로를 정의하면 프록시/스텁 마샬링 DLL에 DllMain, DllRegisterServerDllUnregisterServer 함수에 대한 기본 정의가 자동으로 포함됩니다. 이러한 함수를 사용하여 시스템 레지스트리에서 프록시 DLL을 자체 등록할 수 있습니다.

이 기본 등록 코드는 전체 프록시/스텁 DLL 서버를 등록하기 위해 CLSID로 발견된 첫 번째 인터페이스의 GUID를 사용합니다. COM은 나중에 이 CLSID를 사용하여 서버가 처리하도록 등록된 인터페이스의 마샬링을 위해 컴파일된 프록시/스텁 서버를 찾아서 로드합니다. 애플리케이션이 스레드, 프로세스 또는 컴퓨터 경계를 넘어 인터페이스 메서드를 호출하는 경우 COM은 인터페이스 식별자 레지스트리 항목을 사용하여 프록시/스텁 마샬링 서버에 대한 CLSID 레지스트리 항목을 찾습니다. 그런 다음, 이 CLSID를 사용하여 인터페이스 호출을 마샬링할 수 있도록 서버를 로드합니다(아직 로드되지 않은 경우).

기본 CLSID>를 사용하는 대신 프록시/스텁 서버의 CLSID를 명시적으로 지정하려는 경우 PROXY_CLSID=<clsid 매크로를 사용합니다. 예를 들어 표준 마샬링 DLL을 사용자 고유의 in-process COM 서버로 빌드하거나 DLL_PROCESS_ATTACH 처리하기 위해 고유한 DllMain 을 정의해야 하는 경우입니다.

DEFINE_GUID 매크로에서 사용하는 이진 16진수 형식으로 CLSID 값을 정의하려면 PROXY_CLSID 대신 PROXY_CLSID_IS= 매크로를 사용합니다.

또한 기본 DllRegisterServer 함수가 실행되면 ThreadingModel=Both를 사용하여 서버를 등록합니다.

다음 메이크파일 예제에서는 REGISTER_PROXY_DLLPROXY_CLSID= 매크로를 사용합니다.

example.h example.tlb example_p.c example_i.c dlldata.c : example.idl
    midl example.idl
dlldata.obj : dlldata.c
    CL /c /DWIN32 /DREGISTER_PROXY_DLL dlldata.c
example.obj : example_p.c
    CL /c /DWIN32 /DREGISTER_PROXY_DLL \
    /DPROXY_CLSID=7a98c250-6808-11cf-b73b-00aa00b677a7
example_p.c
iids.obj : example_i.c
PROXYSTUBOBJS = dlldata.obj example.obj iids.obj
PROXYSTUBLIBS = kernel32.lib rpcns4.lib rpcrt4.lib uuid.lib
proxy.dll : $(PROXYSTUBOBJX) example.def
    link /dll /out:proxy.dll /def:example.def
        $(PROXYSTUBOBJS) $(PROXYSTUBLIBS)
    regsvr32 /s proxy.dll

/D 전처리기 옵션에 대한 자세한 내용은 C 컴파일러 설명서를 참조하세요.