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.
Jeśli wybrałeś marshaling proxy/stub dla swojej aplikacji, pliki .c i .h wygenerowane przez narzędzie MIDL muszą zostać skompilowane i połączone, aby utworzyć bibliotekę DLL serwera proxy, a ta biblioteka DLL musi zostać dodana do rejestru systemowego, aby klienci mogli uzyskać dostęp do interfejsów. Plik wygenerowany przez MIDL, Dlldata.c, zawiera niezbędne procedury i inne informacje potrzebne do budowania i rejestrowania biblioteki DLL proxy/szkieletu.
Pierwszym krokiem tworzenia biblioteki DLL jest napisanie pliku definicji modułu dla konsolidatora, jak pokazano w poniższym przykładzie:
LIBRARY example.dll
DESCRIPTION 'generic proxy/stub DLL'
EXPORTS DllGetClassObject @1 PRIVATE
DllCanUnloadNow @2 PRIVATE
DllRegisterServer @4 PRIVATE
DllUnregisterServer @5 PRIVATE
Alternatywnie możesz określić te wyeksportowane funkcje w wierszu polecenia LINK pliku make.
Wyeksportowane funkcje są zadeklarowane w Rpcproxy.h, który jest dołączany do dlldata.c, a domyślne implementacje są częścią biblioteki uruchomieniowej RPC. COM używa tych funkcji do tworzenia fabryki klas, zwalniania DLL (po upewnieniu się, że nie istnieją żadne obiekty lub blokady), pobierania informacji o proxy DLL oraz samodzielnego rejestrowania i wyrejestrowywania proxy DLL. Aby skorzystać z tych wstępnie zdefiniowanych funkcji, należy wywołać opcję Cpreprocessor /D (lub -D) podczas kompilowania plików Dlldata.c i Example_p.c, jak pokazano w następującym pliku makefile:
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 example_p.c
iids.obj : example_i.c
PROXYSTUBOBJS = dlldata.obj example.obj iids.obj
PROXYSTUBLIBS = kernel32.lib rpcndr.lib rpcns4.lib rpcrt4.lib uuid.lib
proxy.dll : $(PROXYSTUBOBJS) example.def
link /dll /out:proxy.dll /def:example.def
$(PROXYSTUBOBJS) $(PROXYSTUBLIBS)
regsvr32 /s proxy.dll
Jeśli nie określisz tych definicji preprocesora w czasie kompilacji, te funkcje nie są definiowane automatycznie. (Oznacza to, że makra w pliku Rpcproxy.c nie rozszerzają się na nic). Należy je jawnie zdefiniować w innym pliku źródłowym, którego moduł również zostanie uwzględniony w końcowym łączeniu i kompilacji w wierszu polecenia kompilatora języka C.
Po zdefiniowaniu REGISTER_PROXY_DLL, Rpcproxy.h udostępnia dodatkową kontrolę kompilacji warunkowej za pomocą PROXY_CLSID=GUID, PROXY_CLSID_IS=jawna wartość identyfikatora GUIDi ENTRY_PREFIX=ciąg prefiksu. Te definicje makr są szczegółowo opisane w Definicje kompilatora języka C dla serwera proxy/wkładek w Przewodniku programisty MIDL.
Ręczne rejestrowanie biblioteki DLL serwera proxy
Jeśli z jakiegoś powodu nie można użyć domyślnych procedur rejestracji wycinków serwera proxy, możesz ręcznie zarejestrować bibliotekę DLL, dodając następujące wpisy do rejestru systemowego przy użyciu Regedt32.exe.
HKEY_CLASSES_ROOT
Interface
iid
(Default) = ICustomInterfaceName
ProxyStubClsid32 = {clsid}
HKEY_CLASSES_ROOT
CLSID
clsid
(Default) = ICustomInterfaceName_PSFactory
InprocServer32 = proxstub.dll
Tematy pokrewne