Share via


C-Compilerdefinitionen für Proxy/Stubs

Die Headerdatei Rpcproxy.h enthält die folgenden Makrodefinitionen, von denen jede beim Erstellen einer verteilten COM-Anwendung hilfreich sein kann. Diese Makros werden mit dem Präprozessorschalter /D (oder -D) zur C-Kompilierzeit aufgerufen.

MACRO 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, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} Gibt den Wert des Klassenbezeichners des Servers im binären Hexaxformat an.

 

Durch Das Definieren des REGISTER_PROXY_DLL Makros beim Kompilieren von Dlldata.c enthält Ihre Proxy-/Stub-Marshall-DLL automatisch Standarddefinitionen für die Funktionen DllMain, DllRegisterServer und 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 als CLSID zum Registrieren des gesamten Proxy-/Stub-DLL-Servers. COM verwendet später diese CLSID, um den kompilierten Proxy-/Stubserver für das Marshallen 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 der Schnittstellenbezeichner, 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), damit der Schnittstellenaufruf gemarshallt werden kann.

Verwenden Sie das Makro PROXY_CLSID=<clsid> , 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 ihren eigenen prozessinternen 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 der Server bei Ausführung der Standardmäßigen DllRegisterServer-Funktion bei ThreadingModel=Both registriert wird.

Im folgenden Makefile-Beispiel 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 Präprozessoroption /D finden Sie in der C-Compilerdokumentation.