Freigeben über


C-Compilerdefinitionen für Proxy/Stubs

Die Headerdatei Rpcproxy.h enthält die folgenden Makrodefinitionen, von denen jeder beim Erstellen verteilter COM-Anwendung praktisch sein kann. Diese Makros werden mit dem Schalter /D (oder -D) zur C-Kompilierungszeit aufgerufen.

MAKRO Beschreibung
REGISTER_PROXY_DLL Generiert DllMain-, DllRegisterServer-und DllUnregisterServer- funktionen zum automatischen Registrieren einer Proxy-DLL.
PROXY_CLSID=<clsid-> Gibt einen Klassenbezeichner für den Server an. Wenn dieses Makro nicht definiert ist, ist die STANDARD-CLSID der erste Schnittstellenbezeichner, den der MIDL-Compiler in der IDL-Spezifikation für den Proxy-/Stub-Server findet.
PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} Gibt den Wert des Klassenbezeichners des Servers im binären Hex-Format an.

 

Durch Definieren des REGISTER_PROXY_DLL Makros beim Kompilieren von Dlldata.c enthält Ihre Proxy-/Stub marshaling-DLL automatisch Standarddefinitionen für die funktionen DllMain, DllRegisterServerund DllUnregisterServer. Sie können diese Funktionen verwenden, um Ihre Proxy-DLL in der Systemregistrierung selbst zu registrieren.

Dieser Standardregistrierungscode verwendet die GUID der ersten Schnittstelle, die als CLSID zum Registrieren des gesamten Proxy-/Stub-DLL-Servers aufgetreten ist. COM verwendet diese CLSID später, um den kompilierten Proxy-/Stubserver für die Marshaling einer der Schnittstellen zu suchen und zu laden, für die der Server registriert ist. Wenn eine Anwendung einen Schnittstellenmethodenaufruf vorgibt, der Thread-, Prozess- oder Computergrenzen überschreitet, verwendet COM den Registrierungseintrag für die Schnittstellen-ID, um den CLSID-Registrierungseintrag für den Proxy-/Stub-Marshaling-Server zu finden. Anschließend wird diese CLSID verwendet, um den Server zu laden (sofern er noch nicht geladen ist), damit der Schnittstellenaufruf gemarstet werden kann.

Verwenden Sie die PROXY_CLSID=<clsid-> Makro, wenn Sie die CLSID des Proxy-/Stubservers explizit angeben möchten, anstatt die standard-CLSID zu verwenden. Wenn Sie z. B. eine standardmäßige Marshalling-DLL als eigenen COM-Server erstellen, oder wenn Sie Ihre eigene DllMain- definieren müssen, um DLL_PROCESS_ATTACH zu verarbeiten.

Verwenden Sie PROXY_CLSID_IS= Makro anstelle von PROXY_CLSID, um den Wert der CLSID im binären Hexadezimalformat zu definieren, das vom DEFINE_GUID Makro verwendet wird.

Beachten Sie außerdem, dass beim Ausführen der standardmäßigen DllRegisterServer--Funktion der Server bei ThreadingModel=Both registriert wird.

Im folgenden Makefile-Beispiel werden die REGISTER_PROXY_DLL und PROXY_CLSID= Makros verwendet:

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

Weitere Informationen zur Option /D Preprocessor finden Sie in der C-Compilerdokumentation.