Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Plik nagłówkowy Rpcproxy.h zawiera następujące definicje makr, z których każda może być wygodna podczas kompilowania rozproszonej aplikacji COM. Te makra są wywoływane za pomocą przełącznika preprocesora /D (lub -D) w czasie kompilacji języka C.
| MAKRO | Opis |
|---|---|
| REGISTER_PROXY_DLL | Generuje DllMain, DllRegisterServeri DllUnregisterServer funkcje automatycznego rejestrowania biblioteki DLL serwera proxy. |
| PROXY_CLSID=> clsid< | Określa identyfikator klasy serwera. Jeśli to makro nie jest zdefiniowane, domyślny identyfikator CLSID jest pierwszym identyfikatorem interfejsu, który kompilator MIDL napotka w specyfikacji IDL serwera proxy/łącznika. |
| PROXY_CLSID_IS={0x8hexdigits, 0x4hexdigits,0x4hexdigits, {0x2hexdigits,0x2hexdigits, 0x0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits, 0x2hexdigits,0x2hexdigits,}} | Określa wartość identyfikatora klasy serwera w formacie binarnym szesnastkowym. |
Definiując makro REGISTER_PROXY_DLL podczas kompilowania biblioteki Dlldata.c, biblioteka DLL serwera proxy/klastra zastępczego automatycznie będzie zawierać domyślne definicje DllMain, DllRegisterServeri dllUnregisterServer. Za pomocą tych funkcji można samodzielnie zarejestrować bibliotekę DLL serwera proxy w rejestrze systemowym.
Ten domyślny kod rejestracji używa identyfikatora GUID pierwszego interfejsu napotkanego jako identyfikator CLSID do rejestrowania całego serwera proxy/serwera DLL zastępczego. Com później używa tego identyfikatora CLSID do lokalizowania i ładowania skompilowanego serwera proxy/serwera zastępczego na potrzeby marshalingu dowolnych interfejsów, które serwer jest zarejestrowany do obsługi. Gdy aplikacja wykonuje wywołanie metody interfejsu, które przekracza granice wątku, procesu lub komputera, com używa wpisu rejestru identyfikatora interfejsu w celu zlokalizowania wpisu rejestru CLSID dla serwera proxy/serwera marshalingu zastępczego. Następnie używa tego identyfikatora CLSID do załadowania serwera (jeśli jeszcze nie został załadowany), aby wywołanie interfejsu można było przeprowadzić marshaling.
Użyj PROXY_CLSID=<clsid> makro, jeśli chcesz jawnie określić identyfikator CLSID serwera proxy/stub, a nie polegać na domyślnym identyfikatorze CLSID. Jeśli na przykład tworzysz standardową bibliotekę DLL marshaling jako własny serwer COM w procesie, lub jeśli musisz zdefiniować własny DllMain do obsługi DLL_PROCESS_ATTACH.
Użyj PROXY_CLSID_IS= makro zamiast PROXY_CLSID, aby zdefiniować wartość identyfikatora CLSID w formacie szesnastkowym binarnym używanym przez makro DEFINE_GUID.
Należy również pamiętać, że gdy zostanie uruchomiona domyślna funkcja DllRegisterServer, rejestruje serwer za pomocą elementu ThreadingModel=Both.
W poniższym przykładzie pliku makefile użyto REGISTER_PROXY_DLL i PROXY_CLSID= makr:
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
Aby uzyskać więcej informacji na temat opcji preprocesora /D, zobacz dokumentację kompilatora języka C.