Compartilhar via


Definições do compilador C para proxy/stubs

O arquivo de cabeçalho Rpcproxy.h inclui as seguintes definições de macro, cada uma das quais pode ser conveniente ao criar um aplicativo COM distribuído. Essas macros são invocadas com a opção de pré-processador /D (ou -D) no momento da compilação C.

MACRO Descrição
REGISTER_PROXY_DLL Gera as funções DllMain, DllRegisterServer e DllUnregisterServer para registrar automaticamente uma DLL de proxy.
PROXY_CLSID=<clsid> Especifica um identificador de classe para o servidor. Se essa macro não estiver definida, o CLSID padrão será o primeiro identificador de interface que o compilador MIDL encontra na especificação de IDL para o servidor Proxy/Stub.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} Especifica o valor do identificador de classe do servidor no formato hexadecimal binário.

 

Ao definir a macro REGISTER_PROXY_DLL ao compilar Dlldata.c, a DLL de marshaling de proxy/stub incluirá automaticamente definições padrão para as funções DllMain, DllRegisterServer e DllUnregisterServer . Você pode usar essas funções para registrar automaticamente sua DLL de proxy no registro do sistema.

Esse código de registro padrão usa o GUID da primeira interface encontrada como CLSID para registrar todo o servidor DLL proxy/stub. POSTERIORmente, o COM usa esse CLSID para localizar e carregar o servidor proxy/stub compilado para o marshaling de qualquer uma das interfaces que o servidor está registrado para manipular. Quando um aplicativo faz uma chamada de método de interface que cruza limites de thread, processo ou computador, o COM usa a entrada do registro do identificador de interface para localizar a entrada do registro CLSID para o servidor de marshaling de proxy/stub. Em seguida, ele usa esse CLSID para carregar o servidor (se ele ainda não estiver carregado) para que a chamada de interface possa ser empacotada.

Use a macro PROXY_CLSID=<clsid> quando quiser especificar explicitamente o CLSID do servidor proxy/stub em vez de depender do CLSID padrão. Por exemplo, se você estiver criando uma DLL de marshaling padrão como seu próprio servidor COM em processo ou se precisar definir seu próprio DllMain para lidar com DLL_PROCESS_ATTACH.

Use PROXY_CLSID_IS= macro em vez de PROXY_CLSID para definir o valor do CLSID no formato hexadecimal binário usado pela macro DEFINE_GUID .

Observe também que, quando a função DllRegisterServer padrão é executada, ela registra o servidor com ThreadingModel=Both.

O exemplo de makefile a seguir usa as macros REGISTER_PROXY_DLL e PROXY_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

Para obter mais informações sobre a opção de pré-processador /D , consulte a documentação do compilador C.