Definizioni del compilatore C per proxy/stub

Il file di intestazione Rpcproxy.h include le definizioni di macro seguenti, ognuna delle quali può essere utile durante la compilazione di un'applicazione COM distribuita. Queste macro vengono richiamate con il preprocessore /D (o -D) all'ora di compilazione C.

MACRO Descrizione
REGISTER_PROXY_DLL Genera funzioni DllMain, DllRegisterServer e DllUnregisterServer per registrare automaticamente una DLL proxy.
PROXY_CLSID=<clsid> Specifica un identificatore di classe per il server. Se questa macro non è definita, CLSID predefinito è il primo identificatore dell'interfaccia che il compilatore MIDL rileva nella specifica IDL per il server Proxy/Stub.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x 2hexdigits,0x 2hexdigits, 0x 2hexdigits,}} Specifica il valore dell'identificatore della 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 definizioni predefinite per le funzioni DllMain, DllRegisterServer e 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 in seguito questo CLSID per individuare e caricare il server proxy/stub compilato per il marshalling di una delle interfacce che il server viene registrato per gestire. Quando un'applicazione effettua una chiamata al metodo di interfaccia che attraversa thread, processo o limiti computer, COM usa la voce del Registro di sistema dell'identificatore dell'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 all'interfaccia possa essere eseguita in marshalling.

Usare la macro CLSID di PROXY_CLSID=<clsid quando si vuole 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 una DLLMain personalizzata per gestire DLL_PROCESS_ATTACH.

Usare la macro PROXY_CLSID_IS= anziché PROXY_CLSID per definire il valore del CLSID nel formato esadecimale binario usato dalla macro DEFINE_GUID.

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

Nell'esempio di makefile seguente vengono usate 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 di preprocessore /D , vedere la documentazione del compilatore C.