Kokkuvõte
Sageli on vaja alla laadida sõltuvaid dll-e koos ActiveX-juhtelemendiga. MFC ja Visual põhijuhtelementidel on see nõue. Selles artiklis selgitatakse kolme võimalust, mida saate teha.
Lisateave
Juhtelementi allalaadimiseks on kolm võimalust, kuidas kaasata sõltuvaid DLL-i. Esimene viis on kaasata DLL (ID) CAB-faili juhtelementi ning OCX ja INF-failid. Selle langusriskid on see, et DLL laaditakse alla iga kord, kui juhtelement alla laaditakse. Mõnel juhul on see sobiv. Järgmine viis on eraldada sõltuvaid DLL-e eraldi CAB-failis ja viidata selle juhtelementi INF-failis. Kolmas võimalus on ka pakkida DLL eraldi CAB-faili, kuid CAB-faili nimetatakse juhtelementi INF-failis konksuga. Konksu abil saab alla laadida faili INF-või EXE-faili, mis sisaldub sõltuvas CAB-failis. OCX-i (Simpdll. dll) sõltuvuse lisamiseks (selles näites) lisatakse INF-faili jaotisse [AddCode] vastava jaotise juhtelement.
[Add.Code] TestDw.ocx=TestDw.ocx simpdll.dll=simpdll.dll
Seejärel lisatakse jaotis INF-faili, et juhtida DLL-i installi.
[simpdll.dll] FileVersion=1,0,0,1 file-win32-x86=thiscab
See on esimene viis, mis oli märgitud, et lisada DLL-i sõltuvus allalaadimisest. Kui soovite DLL-i lisada eraldi CAB-faili, on vaja muuta asukohta "thiscab" URL-iks, kus asub sõltuv kabiin.
file-win32-x86=http://www.contoso.com/controls/dependent.cabSel juhul sisaldab Simpdll. cab ainult Simpdll. dll. mitu DLL-i saab vajadusel lisada ka INF-ja CAB-failidele. Kolmas viis paketti sõltuvate dll-teekide kasutamiseks on viidata sõltuvale DLL-i CAB-failile konksu abil. Seda tehnikat kasutades saab faili INF või EXE sõltuva KABIINi kaudu alla laadida. Järgmine jaotis INF-faili juhtelementidest sõltub MFC-juhtelementide allalaadimisest sõltuvale DLL-ile.
[Add.Code] ... msvcrt.dll=msvcrt.dll mfc42.dll=mfc42.dll olepro32.dll=olepro32.dll [msvcrt.dll] FileVersion=4,20,0,6164 hook=mfc42installer ... [mfc42installer] file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab run=%EXTRACT_DIR%\mfc42.exe
Sel juhul on MFC DLL-failid pakitud iseavanev. exe faili, mis sisaldub CAB-failis (mfc42. cab). Siiski ei ole Microsoftist praegu saadaval tööriistu, mille abil saab iseavanev exe-failid praegu kättesaadavaks teha. Seetõttu on teil vaja pakkida sõltuvaid DLLs-faile INF-failidega või viide INF-i versioonile installi konksul:
[yourinstaller] file-win32-x86=http://example.microsoft.com/simpdll.cab InfFile=your.inf
Või peate koostama iseavanev EXE-faili kolmanda osapoole tööriistade abil. Illustreerimiseks on see INF-failid, mida kasutatakse sõltuvate MFC DLL-failide installimiseks. Saate seda muuta oma dll-teekide installimiseks samamoodi, nagu on installitud MFC DLLs.
; ========================= Mfc42.inf ========================= ; This file will control the download of the MFC 4.2 DLLs [version] ; version signature (same for both NT and Win95) do not remove signature="$CHICAGO$" AdvancedINF=2.0 [SourceDisksNames] ; This section specifies that all sources are in the "default" ; location. 1="default",,1 [DefaultInstall] ; Default section to process and copy all files under the section ; mfcdllsx.files and Register DLLs under the section mfcdllsx.register. CopyFiles=mfcdllsx.files RegisterOCXs=mfcdllsx.register [DestinationDirs] ; Destination Directories for CopyFiles Sections. ; 11 indicates LDID_SYS - system directory mfcdllsx.files=11 [mfcdllsx.files] ; ,,,32 - Suppress version conflict dialog and don't overwrite newer ; DLLs msvcrt.dll,,,32 mfc42.dll,,,32 olepro32.dll,,,32 [mfcdllsx.register] ; msvcrt.dll is not self registering %11%\mfc42.dll %11%\olepro32.dll ; ====================== Mfc42.inf ======================
Kui ekspordite funktsiooni DllRegisterServer, peab DLL olema loetletud jaotises register. Selle saab kindlaks teha, uurides DLL-i Visual C kompilaatori DUMPBIN. exe abil. Saate käivitada tööriista Regsvr32 ka DLL-is, mis proovib DLL-i registreerida. Regsvr32 laadib DLL-i, kontrollib, kas DllRegisterServer on õigesti eksporditud GetProcAddress () funktsiooni DLLRegisterServer abil. Kui see õnnestub, eksporditakse funktsioon DllRegisterServer ja seejärel helistatakse. Olge ettevaatlik, et tööriista Regsvr32 operatsioonisüsteemis DLL võib olla soovimatud kõrvalmõjud. Kui DllRegisterServer on kutsutud, teeb see õigeid registrikannete, osutades seadmes olevale DLL-asukohale. Kui soovite näiteks tippida MS-DOS-i viibale järgmisi juhiseid, võib see põhjustada probleeme.
copy mfc42.dll C:\Test run "D:\msdev\bin\REGSVR32.EXE C:\Test\mfc42.dll" delete mfc42.dll
Järgmine kord, kui süsteem proovib otsida Mfc42. dll, otsib register üles, leiab, et fail on vastendatud C:\Test\Mfc42.dll ja ei leia seda seal. Tööriista Regsvr32 käitamine seadmes, mis on juba arvutisse installitud, ei põhjusta probleeme. DLL-i installimine konksuga ja iseavanev EXE on kasulik järgmisel põhjusel: kui täiendamiseks vajalik DLL on juba mälus laaditud, siis allalaadimine nurjub. Tegemist on teadaoleva probleemiga, mis on lahendatud Internet Exploreri versioonis 4,0. Internet Explorer 4,0 soovitab taaskäivitada ja laadida uuesti uue DLL-i.
Viited
Lisateabe saamiseks lugege järgmisi Microsofti teabebaasi artikleid:
MFC-juhtelementide pakettide kasutamine Interneti kaudu
FileVersion ja #Version määramine komponendi allalaadimiseksLisateavet leiate järgmistest veebiülekannetest.