Compartilhar via


Criando e registrando uma DLL de proxy

Se você escolheu o empacotamento de proxy/stub para seu aplicativo, os arquivos .c e .h gerados pelo MIDL devem ser compilados e vinculados para criar uma DLL de proxy, e essa DLL deve ser inserida no registro do sistema para que os clientes possam localizar suas interfaces. O arquivo Dlldata.c gerado pelo MIDL contém as rotinas necessárias e outras informações para criar e registrar uma DLL proxy/stub.

A primeira etapa na criação da DLL é gravar um arquivo de definição de módulo para o vinculador, conforme mostrado no exemplo a seguir:

LIBRARY        example.dll
DESCRIPTION    'generic proxy/stub DLL'
EXPORTS        DllGetClassObject      @1 PRIVATE
               DllCanUnloadNow        @2 PRIVATE
               DllRegisterServer      @4 PRIVATE
               DllUnregisterServer    @5 PRIVATE
 

Como alternativa, você pode especificar essas funções exportadas na linha de comando LINK do makefile.

As funções exportadas são declaradas em Rpcproxy.h, que Dlldata.c inclui, e as implementações padrão fazem parte da biblioteca de tempo de execução RPC. COM usa essas funções para criar uma fábrica de classes, descarregar DLLs (depois de certificar-se de que nenhum objeto ou bloqueios existem), recuperar informações sobre a DLL proxy e para auto-registrar e cancelar o registro da DLL proxy. Para aproveitar essas funções predefinidas, você precisa invocar a opção Cpreprocessor /D (ou -D) ao compilar os arquivos Dlldata.c e Example_p.c, conforme mostrado no makefile a seguir:

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 example_p.c
iids.obj : example_i.c
PROXYSTUBOBJS = dlldata.obj example.obj iids.obj
PROXYSTUBLIBS = kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib uuid.lib
proxy.dll : $(PROXYSTUBOBJS) example.def
    link /dll /out:proxy.dll /def:example.def
        $(PROXYSTUBOBJS) $(PROXYSTUBLIBS)
    regsvr32 /s proxy.dll
 

Se você não especificar essas definições de pré-processador em tempo de compilação, essas funções não serão definidas automaticamente. (Ou seja, as macros em Rpcproxy.c se expandem para nada.) Você teria que tê-los definido explicitamente em outro arquivo de origem, cujo módulo também seria incluído na vinculação final e compilação na linha de comando do compilador C.

Quando REGISTER_PROXY_DLL é definido, Rpcproxy.h fornece controle de compilação condicional adicional com PROXY_CLSID=guid, PROXY_CLSID_IS=valor explícito de guid e ENTRY_PREFIX=prefix string. Essas definições de macro são descritas com mais detalhes em C-Compiler Definitions for Proxy/Stubs no MIDL Programmer's Guide.

Registrando manualmente a DLL do proxy

Se, por algum motivo, você não puder usar as rotinas de registro de stub de proxy padrão, poderá registrar manualmente a DLL adicionando as seguintes entradas ao registro do sistema, usando Regedt32.exe.

HKEY_CLASSES_ROOT
   Interface
      iid
         (Default) = ICustomInterfaceName
         ProxyStubClsid32 = {clsid}
HKEY_CLASSES_ROOT
   CLSID
      clsid
         (Default) = ICustomInterfaceName_PSFactory
         InprocServer32 = proxstub.dll

Definições do compilador C para proxy/stubs

Como registrar servidores COM

Auto-Cadastro