Partager via


Définitions du compilateur C pour les proxys/stubs

Le fichier d’en-tête Rpcproxy.h inclut les définitions de macro suivantes, chacune d’elles pouvant être pratique lors de la création d’une application COM distribuée. Ces macros sont appelées avec le commutateur de préprocesseur /D (ou -D) au moment de la compilation C.

MACRO Description
REGISTER_PROXY_DLL Génère les fonctions DllMain, DllRegisterServer et DllUnregisterServer pour l’inscription automatique d’une DLL proxy.
PROXY_CLSID=<clsid> Spécifie un identificateur de classe pour le serveur. Si cette macro n’est pas définie, le CLSID par défaut est le premier identificateur d’interface rencontré par le compilateur MIDL dans la spécification IDL pour le serveur proxy/stub.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} Spécifie la valeur de l’identificateur de classe du serveur au format hexadécimal binaire.

 

En définissant la macro REGISTER_PROXY_DLL lors de la compilation de Dlldata.c, votre DLL de marshaling proxy/stub inclut automatiquement les définitions par défaut pour les fonctions DllMain, DllRegisterServer et DllUnregisterServer . Vous pouvez utiliser ces fonctions pour inscrire automatiquement votre DLL proxy dans le registre système.

Ce code d’inscription par défaut utilise le GUID de la première interface rencontrée en tant que CLSID pour inscrire l’intégralité du serveur DLL proxy/stub. COM utilise ultérieurement ce CLSID pour localiser et charger le serveur proxy/stub compilé pour le marshaling de l’une des interfaces que le serveur est inscrit pour gérer. Lorsqu’une application effectue un appel de méthode d’interface qui franchit les limites du thread, du processus ou de l’ordinateur, COM utilise l’entrée de Registre d’identificateur d’interface pour localiser l’entrée de Registre CLSID pour le serveur de marshaling proxy/stub. Il utilise ensuite ce CLSID pour charger le serveur (s’il n’est pas déjà chargé) afin que l’appel d’interface puisse ensuite être marshalé.

Utilisez la macro PROXY_CLSID=<clsid> lorsque vous souhaitez spécifier explicitement le CLSID du serveur proxy/stub au lieu de vous appuyer sur le CLSID par défaut. Par exemple, si vous créez une DLL de marshaling standard comme votre propre serveur COM in-process, ou si vous devez définir votre propre DllMain pour gérer DLL_PROCESS_ATTACH.

Utilisez PROXY_CLSID_IS= macro au lieu de PROXY_CLSID pour définir la valeur du CLSID au format hexadécimal binaire utilisé par la macro DEFINE_GUID .

Notez également que lorsque la fonction DllRegisterServer par défaut s’exécute, elle inscrit le serveur avec ThreadingModel=Both.

L’exemple makefile suivant utilise les macros REGISTER_PROXY_DLL et 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

Pour plus d’informations sur l’option de préprocesseur /D , consultez la documentation du compilateur C.