Partager via


Définitions du compilateur C pour proxy/stubs

Le fichier d’en-tête Rpcproxy.h inclut les définitions de macro suivantes, chacune 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 dllMain, dllRegisterServeret fonctions DllUnregisterServer pour inscrire automatiquement 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 du serveur Proxy/Stub.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x0x 2hexdigits,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 des définitions par défaut pour les fonctions DllMain, DllRegisterServeret 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 d’une des interfaces que le serveur est inscrit pour gérer. Lorsqu’une application effectue un appel de méthode d’interface qui traverse des limites de thread, de processus ou d’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 s’appuyer sur le CLSID par défaut. Par exemple, si vous créez une DLL de marshaling standard en tant que 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 par défaut DllRegisterServer s’exécute, elle inscrit le serveur auprès de 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 de votre compilateur C.