Udostępnij przez


Kompilowanie i rejestrowanie biblioteki DLL serwera proxy

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

Definicje kompilatora C dla proxy/stubów

rejestrowanie serwerów COM

Samodzielna rejestracja