Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
Související témata