C-Compilerdefinitionen für Proxys/Stubs
Die Headerdatei Rpcproxy.h enthält die folgenden Makrodefinitionen, von denen jede beim Erstellen einer verteilten COM-Anwendung nützlich sein kann. Diese Makros werden mit dem Präprozessorschalter /D (oder -D) zur C-Kompilierzeit aufgerufen.
| MACRO | Beschreibung |
|---|---|
| REGISTRIEREN DER _ _ PROXY-DLL | Generiert die Funktionen DllMain, DllRegisterServer und DllUnregisterServer 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={0x 8hexdigits, 0x 4hexdigits, 0x 4hexdigits, {0x 2hexdigits,0x 2hexdigits, 0x 2hexdigits,0x 2hexdigits, 0x 2hexdigits, 0x 2hexdigits, 0x 2hexdigits,0x 2hexdigits,}} | Gibt den Wert des Klassenbezeichners des Servers im binären Hexadezimalformat an. |
Durch Definieren des REGISTER _ PROXY _ DLL-Makros beim Kompilieren von Dlldata.c schließt ihre Proxy-/Stub-Marshalling-DLL automatisch Standarddefinitionen für die Funktionen DllMain, DllRegisterServer und DllUnregisterServer ein. Sie können diese Funktionen verwenden, um Ihre Proxy-DLL selbst in der Systemregistrierung zu registrieren.
Dieser Standardregistrierungscode verwendet die GUID der ersten Schnittstelle, die als CLSID zum Registrieren des gesamten Proxy-/Stub-DLL-Servers gefunden wurde. COM verwendet diese CLSID später, um den kompilierten Proxy-/Stubserver für das Marshalling einer der Schnittstellen zu suchen und zu laden, für die der Server registriert ist. Wenn eine Anwendung einen Schnittstellenmethodenaufruf vornimmt, der Thread-, Prozess- oder Computergrenzen überschreitet, verwendet COM den Registrierungseintrag des Schnittstellenbezeichners, um den CLSID-Registrierungseintrag für den Proxy-/Stub-Marshallingserver zu suchen. Anschließend wird diese CLSID verwendet, um den Server zu laden (sofern er noch nicht geladen ist), sodass der Schnittstellenaufruf gemarshallt werden kann.
Verwenden Sie das PROXY _ CLSID clsid-Makro, = < wenn Sie > die CLSID des Proxy-/Stubservers explizit angeben möchten, anstatt sich auf die STANDARD-CLSID zu verlassen. Wenn Sie z. B. eine standardmäßige Marshalling-DLL als eigenen IN-Process-COM-Server erstellen oder eine eigene DllMain-Datei definieren müssen, um DLL PROCESS ATTACH zu _ _ verarbeiten.
Verwenden Sie PROXY _ CLSID _ IS= macro anstelle von PROXY _ CLSID, um den Wert der CLSID im hexadezimalen Binärformat zu definieren, das vom DEFINE _ GUID-Makro verwendet wird.
Beachten Sie außerdem, dass der Server bei Ausführung der DllRegisterServer-Standardfunktion mit ThreadingModel=Both registriert wird.
Im folgenden Makefilebeispiel werden die Makros REGISTER _ PROXY _ DLL und PROXY _ CLSID= 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 /D-Präprozessoroption finden Sie in der C-Compilerdokumentation.