Condividi tramite


Definizioni del compilatore C per proxy/stub

Il file di intestazione Rpcproxy.h include le definizioni di macro seguenti, ognuna delle quali può risultare utile quando si compila un'applicazione COM distribuita. Queste macro vengono richiamate con l'opzione del preprocessore /D (o -D) in fase di compilazione C.

MACRO Descrizione
REGISTER_PROXY_DLL Genera DllMain, DllRegisterServere DllUnregisterServer funzioni per la registrazione automatica di una DLL proxy.
PROXY_CLSID=<> clsid Specifica un identificatore di classe per il server. Se questa macro non è definita, il CLSID predefinito è il primo identificatore di interfaccia rilevato dal compilatore MIDL nella specifica IDL per il server Proxy/Stub.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} Specifica il valore dell'identificatore di classe del server in formato esadecimale binario.

 

Definendo la macro REGISTER_PROXY_DLL durante la compilazione di Dlldata.c, la DLL di marshalling proxy/stub includerà automaticamente le definizioni predefinite per le funzioni DllMain, DllRegisterServere funzioni dllUnregisterServer. È possibile usare queste funzioni per registrare automaticamente la DLL proxy nel Registro di sistema.

Questo codice di registrazione predefinito usa il GUID della prima interfaccia rilevata come CLSID per registrare l'intero server DLL proxy/stub. COM usa successivamente questo CLSID per individuare e caricare il server proxy/stub compilato per il marshalling di qualsiasi interfaccia registrata dal server per gestire. Quando un'applicazione effettua una chiamata al metodo di interfaccia che attraversa i limiti di thread, processi o computer, COM usa la voce del Registro di sistema dell'identificatore di interfaccia per individuare la voce del Registro di sistema CLSID per il server di marshalling proxy/stub. Usa quindi questo CLSID per caricare il server (se non è già caricato) in modo che la chiamata di interfaccia possa essere sottoposto a marshalling.

Usare la macro PROXY_CLSID=<clsid> quando si desidera specificare in modo esplicito il CLSID del server proxy/stub anziché basarsi sul CLSID predefinito. Ad esempio, se si sta creando una DLL di marshalling standard come server COM in-process o se è necessario definire DllMain per gestire DLL_PROCESS_ATTACH.

Utilizzare PROXY_CLSID_IS= macro anziché PROXY_CLSID per definire il valore di CLSID nel formato esadecimale binario utilizzato dalla macro DEFINE_GUID.

Si noti anche che quando viene eseguita la funzione dllRegisterServer predefinita, registra il server con ThreadingModel=Both.

L'esempio di makefile seguente usa le macro REGISTER_PROXY_DLL e 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

Per altre informazioni sull'opzione /D preprocessore, vedere la documentazione del compilatore C.