Definiciones del compilador de C para proxy/códigos auxiliares
El archivo de encabezado Rpcproxy.h incluye las siguientes definiciones de macro, cada una de las cuales puede ser conveniente al compilar una aplicación COM distribuida. Estas macros se invocan con el modificador de preprocesador /D (o -D) en tiempo de compilación de C.
MACRO | Descripción |
---|---|
REGISTER_PROXY_DLL | Genera funciones DllMain, DllRegisterServer y DllUnregisterServer para registrar automáticamente un archivo DLL de proxy. |
PROXY_CLSID=<clsid> | Especifica un identificador de clase para el servidor. Si no se define esta macro, el CLSID predeterminado es el primer identificador de interfaz que encuentra el compilador MIDL en la especificación IDL del servidor proxy/Stub. |
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} | Especifica el valor del identificador de clase del servidor en formato hexadecimal binario. |
Al definir la macro REGISTER_PROXY_DLL al compilar Dlldata.c, el archivo DLL de serialización de proxy/stub incluirá automáticamente definiciones predeterminadas para las funciones DllMain, DllRegisterServer y DllUnregisterServer . Puede usar estas funciones para registrar automáticamente el archivo DLL de proxy en el registro del sistema.
Este código de registro predeterminado usa el GUID de la primera interfaz encontrada como CLSID para registrar todo el servidor DLL proxy/stub. COM usa más adelante este CLSID para buscar y cargar el servidor proxy/código auxiliar compilado para la serialización de cualquiera de las interfaces que el servidor está registrado para controlar. Cuando una aplicación realiza una llamada de método de interfaz que cruza los límites de subproceso, proceso o equipo, COM usa la entrada del Registro del identificador de interfaz para buscar la entrada del Registro CLSID para el servidor de serialización de proxy/stub. A continuación, usa este CLSID para cargar el servidor (si aún no está cargado) para que la llamada de interfaz se pueda serializar.
Use la macro PROXY_CLSID=<clsid> cuando desee especificar explícitamente el CLSID del servidor proxy/stub en lugar de confiar en el CLSID predeterminado. Por ejemplo, si va a compilar un archivo DLL de serialización estándar como su propio servidor COM en proceso, o si necesita definir su propio DllMain para controlar DLL_PROCESS_ATTACH.
Use PROXY_CLSID_IS= macro en lugar de PROXY_CLSID para definir el valor del CLSID en el formato hexadecimal binario que usa la macro DEFINE_GUID .
Tenga en cuenta también que, cuando se ejecuta la función DllRegisterServer predeterminada, registra el servidor con ThreadingModel=Both.
En el ejemplo makefile siguiente se usan las macros REGISTER_PROXY_DLL y 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 obtener más información sobre la opción de preprocesador /D , consulte la documentación del compilador de C.