Compilación y registro de un archivo DLL de proxy

Si eligió serialización de proxy/código auxiliar para la aplicación, los archivos .c y .h generados por MIDL deben compilarse y vincularse para crear un archivo DLL de proxy y ese archivo DLL debe escribirse en el registro del sistema para que los clientes puedan localizar las interfaces. El archivo generado por MIDL Dlldata.c contiene las rutinas necesarias y otra información para compilar y registrar un archivo DLL proxy/stub.

El primer paso para compilar el archivo DLL es escribir un archivo de definición de módulo para el enlazador, como se muestra en el ejemplo siguiente:

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

Como alternativa, puede especificar estas funciones exportadas en la línea de comandos LINK del archivo make.

Las funciones exportadas se declaran en Rpcproxy.h, que dlldata.c incluye y las implementaciones predeterminadas forman parte de la biblioteca en tiempo de ejecución rpc. COM usa estas funciones para crear un generador de clases, descargar archivos DLL (después de asegurarse de que no existen objetos o bloqueos), recuperar información sobre el archivo DLL de proxy y para registrar y anular el registro del archivo DLL del proxy. Para aprovechar estas funciones predefinidas, debe invocar la opción Cpreprocessor /D (o -D) al compilar los archivos Dlldata.c y Example_p.c, como se muestra en el archivo make siguiente:

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
 

Si no especifica estas definiciones de preprocesador en tiempo de compilación, estas funciones no se definen automáticamente. (Es decir, las macros de Rpcproxy.c se expanden a nada). Tendría que haber definido explícitamente en otro archivo de código fuente, cuyo módulo también se incluiría en la vinculación final y compilación en la línea de comandos del compilador de C.

Cuando se define REGISTER_PROXY_DLL, Rpcproxy.h proporciona un control de compilación condicional adicional con PROXY_CLSID=guid, PROXY_CLSID_IS=valor explícito de guid y ENTRY_PREFIX=cadena de prefijo. Estas definiciones de macros se describen con más detalle en Definiciones del compilador de C para proxy/códigos auxiliares en la Guía del programador de MIDL.

Registro manual del archivo DLL de proxy

Si por alguna razón no puede usar las rutinas de registro de código auxiliar de proxy predeterminadas, puede registrar manualmente el archivo DLL agregando las siguientes entradas al registro del sistema, mediante Regedt32.exe.

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

Definiciones del compilador de C para proxy/códigos auxiliares

Registro de servidores COM

Autoregistro