C-kompilatordefinitioner för proxy/stubs

Rubrikfilen Rpcproxy.h innehåller följande makrodefinitioner, som var och en kan vara praktisk när du skapar distribuerade COM-program. Dessa makron anropas med växeln /D (eller -D) förprocessor vid C-kompileringstiden.

MAKRO Beskrivning
REGISTER_PROXY_DLL Genererar DllMain, DllRegisterServeroch DllUnregisterServer funktioner för att automatiskt registrera en proxy-DLL.
PROXY_CLSID=<clsid> Anger en klassidentifierare för servern. Om det här makrot inte har definierats är CLSID som standard den första gränssnittsidentifieraren som MIDL-kompilatorn stöter på i IDL-specifikationen för Proxy-/Stub-servern.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x0x 22hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} Anger värdet för serverns klassidentifierare i binärt hexformat.

 

Genom att definiera det REGISTER_PROXY_DLL makrot vid kompilering av Dlldata.c innehåller din proxy-/stub-kodnings-DLL automatiskt standarddefinitioner för DllMain, DllRegisterServeroch DllUnregisterServer funktioner. Du kan använda dessa funktioner för att självregistrera din proxy-DLL i systemregistret.

Den här standardregistreringskoden använder GUID för det första gränssnittet som påträffades som CLSID för att registrera hela proxy-/stub DLL-servern. COM använder senare detta CLSID för att hitta och läsa in den kompilerade proxy-/stub-servern för marskalkering av något av de gränssnitt som servern är registrerad för att hantera. När ett program gör ett gränssnittsmetodanrop som korsar tråd-, process- eller datorgränser använder COM registerposten för gränssnittsidentifierare för att hitta CLSID-registerposten för proxy-/stub-marskalkeringsservern. Den använder sedan detta CLSID för att läsa in servern (om den inte redan har lästs in) så att gränssnittsanropet sedan kan konverteras.

Använd PROXY_CLSID=<clsid> makro när du uttryckligen vill ange proxy-/stub-serverns CLSID i stället för att förlita dig på standard-CLSID. Om du till exempel skapar en standard-DLL som din egen processbaserade COM-server, eller om du behöver definiera din egen DllMain- för att hantera DLL_PROCESS_ATTACH.

Använd PROXY_CLSID_IS= makro i stället för PROXY_CLSID för att definiera värdet för CLSID i det binära hexadecimala format som DEFINE_GUID makrot använder.

Observera också att när standardfunktionen DllRegisterServer körs registreras servern med ThreadingModel=Båda.

I följande makefile-exempel används makrona REGISTER_PROXY_DLL och 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

Mer information om alternativet /D förprocessor finns i dokumentationen för C-kompilatorn.