Megosztás a következőn keresztül:


Proxy DLL létrehozása és regisztrálása

Ha proxy-/csonk-visszaállítást választott az alkalmazáshoz, a MIDL által létrehozott .c és .h fájlokat össze kell állítani és csatolni kell egy proxy DLL létrehozásához, és a DLL-t be kell írni a rendszerregisztrációs adatbázisba, hogy az ügyfelek megtalálhassák a felületeket. A MIDL által létrehozott Dlldata.c fájl tartalmazza a proxy/stub DLL létrehozásához és regisztrálásához szükséges rutinokat és egyéb információkat.

A DLL létrehozásának első lépése egy moduldefiníciós fájl megírása a hivatkozáshoz, ahogyan az a következő példában látható:

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

Másik lehetőségként megadhatja ezeket az exportált függvényeket a makefile LINK parancssorában.

Az exportált függvények az Rpcproxy.h-ban vannak deklarálva, amelyet a Dlldata.c tartalmaz, és az alapértelmezett implementációk az RPC futásidejű kódtárának részei. A COM ezeket a függvényeket használva létrehoz egy osztály-előállítót, eltávolítja a DLL-eket (miután meggyőződett arról, hogy nincsenek objektumok vagy zárolások), lekéri a proxy DLL-ről szóló információkat, és önregisztrálja és törli a proxy DLL regisztrációját. Az előre definiált függvények előnyeinek kihasználásához meg kell hívnia a Cpreprocessor /D (vagy -D) lehetőséget a Dlldata.c és a Example_p.c fájlok lefordításakor, ahogyan az a következő makefile-ban látható:

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
 

Ha fordításkor nem adja meg ezeket az előfeldolgozási definíciókat, ezek a függvények nem lesznek automatikusan definiálva. (Vagyis az Rpcproxy.c makrói semmire nem terjednek ki.) Explicit módon kellett volna definiálnia őket egy másik forrásfájlban, amelynek modulja a C fordító parancssorának végső csatolásában és fordításában is szerepelne.

A REGISTER_PROXY_DLL definiálásakor az Rpcproxy.h további feltételes fordítási vezérlőt biztosít PROXY_CLSID=guid, PROXY_CLSID_IS=guidexplicit értéke, és ENTRY_PREFIX=előtag-sztring. A MIDL programozói útmutató Proxy/Csonk C-fordítódefiníciók című részében ezek a makródefiníciók részletesebben ismertetésre kerülnek.

A proxy DLL manuális regisztrálása

Ha valamilyen okból nem tudja használni az alapértelmezett proxy-csonkregisztrációs rutinokat, manuálisan regisztrálhatja a DLL-t a következő bejegyzésekkel a rendszerregisztrációs adatbázishoz a Regedt32.exehasználatával.

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

Proxy/Csonk C-fordító definíciói

COM-kiszolgálók regisztrálása

ÖNREGISZTRÁCIÓ