Sdílet prostřednictvím


Vytváření a registrace proxy DLL

Pokud jste pro aplikaci zvolili zařazování proxy/zástupných procedur, musí být kompilovány a propojeny soubory .c a .h, které vygenerovaly MIDL, aby bylo možné vytvořit knihovnu DLL proxy serveru a tato knihovna DLL musí být zadána do systémového registru, aby klienti mohli vyhledat vaše rozhraní. Soubor DLLdata.c vygenerovaný v MIDL obsahuje nezbytné rutiny a další informace pro sestavení a registraci knihovny DLL proxy/zástupných procedur.

Prvním krokem při vytváření knihovny DLL je zápis definičního souboru modulu pro linker, jak je znázorněno v následujícím příkladu:

LIBRARY        example.dll
DESCRIPTION    'generic proxy/stub DLL'
EXPORTS        DllGetClassObject      @1 PRIVATE
               DllCanUnloadNow        @2 PRIVATE
               DllRegisterServer      @4 PRIVATE
               DllUnregisterServer    @5 PRIVATE
 

Případně můžete tyto exportované funkce zadat na příkazovém řádku LINK v souboru pravidel.

Exportované funkce jsou deklarovány v rpcproxy.h, který dlldata.c zahrnuje, a výchozí implementace jsou součástí knihovny RPC runtime. COM tyto funkce používá k vytvoření továrny tříd, uvolnění knihoven DLL (po ověření, že neexistují žádné objekty nebo zámky), načtení informací o knihovně proxy DLL a k samo-registraci a odregistrování proxy DLL. Pokud chcete využít výhod těchto předdefinovaných funkcí, musíte při kompilaci souborů Dlldata.c a Example_p.c vyvolat možnost Cpreprocessor /D (nebo -D), jak je znázorněno v následujícím souboru pravidel:

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
 

Pokud tyto definice preprocesoru v době kompilace nezadáte, nebudou tyto funkce definovány automaticky. (To znamená, že makra v rpcproxy.c rozbalují na nic.) Museli byste je definovat explicitně v jiném zdrojovém souboru, jehož modul by byl také součástí konečného propojení a kompilace na příkazovém řádku kompilátoru jazyka C.

Při definování REGISTER_PROXY_DLL poskytuje rpcproxy.h další podmíněný ovládací prvek kompilace s PROXY_CLSID=guid, PROXY_CLSID_IS=explicitní hodnota guida ENTRY_PREFIX=řetězec předpony. Tyto definice maker jsou podrobněji popsány v Definice kompilátoru jazyka C pro proxy/zástupné procedury v průvodci programátorem MIDL.

Ruční registrace knihovny proxy DLL

Pokud z nějakého důvodu nemůžete použít výchozí rutiny registrace zástupných procedur proxy, můžete knihovnu DLL ručně zaregistrovat přidáním následujících položek do systémového registru pomocí Regedt32.exe.

HKEY_CLASSES_ROOT
   Interface
      iid
         (Default) = ICustomInterfaceName
         ProxyStubClsid32 = {clsid}
HKEY_CLASSES_ROOT
   CLSID
      clsid
         (Default) = ICustomInterfaceName_PSFactory
         InprocServer32 = proxstub.dll

Definice pro C-kompilátor pro proxy/zástupci

registrace serverů COM

samoobslužná registrace