INFO: Systém Windows Rundll a Rundll32 rozhranie

Preklady článku Preklady článku
ID článku: 164787 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

Na tejto stránke

SUHRN

Microsoft Windows 95, Windows 98 a Windows Millennium Edition (Me) obsahuje dva programy pomôcku príkazového riadka s názvom Rundll.exe a Rundll32.exe, ktorý umožní vyvolať funkciu vyvážané z knižnice DLL 16-bitové alebo 32-bitový. Avšak Rundll a Rundll32 programy nespĺňajú umožňuje volať akékoľvek exportovaná funkcia z akéhokoľvek DLL. Napríklad, môžete nepoužívať tieto pomocné programy volať rozhranie API systému Win32 (uplatňovanie Programovací Interface) hovory vyvezený z knižnice DLL systému. Programy iba umožňujú hovorové funkcie z knižnice DLL, ktoré výslovne zapisujú do ako sa nazýva im. Tento článok poskytuje podrobnejšie informácie o používaní Rundll a Rundll32 programy pod operačnými systémami Windows uvedených vyššie.

MIcrosoft Windows NT 4.0, Windows 2000 a Windows XP loď s len Rundll32. Neexistuje žiadna podpora pre Rundll (Win16 utility) na buď platforme.

Rundll a Rundll32 pomocné programy boli pôvodne navrhnuté len pre interné použitie v spoločnosti Microsoft. Ale ich funkčnosť je dostatočne všeobecné, teraz sú k dispozícii na všeobecné použitie. Všimnite si, že systém Windows NT 4.0 lodí len s Rundll32 obslužný program a podporuje iba Rundll32.

DALSIE INFORMACIE

Rundll vs Rundll32

Rundll načítava a spúšťa 16-bitové dll, keďže Rundll32 načítava a spúšťa 32-bitové DLL. Ak ste prejsť nesprávny typ DLL Rundll alebo Rundll32, môže nepodarí spustiť bez uvedenia chybové hlásenia.

Rundll príkazového riadka

Príkazový riadok pre Rundll je nasledovná:
   RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>
				
Príkladom je takto:
   RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Existujú 3 otázky, aby dôkladne zvážili vyššie príkazového riadka:
  1. Rundll alebo Rundll32 vyhľadávania pre daný názov súboru DLL v štandardných miestach (pozrite dokumentáciu pre funkciu LoadLibrary() pre podrobnosti). Odporúča sa, aby ste poskytli úplná cesta knižnice DLL zabezpečiť, že sa zistí ten správny. Najlepšie výsledky, použite skrátený názov súboru namiesto dlhé meno súboru zabezpečiť, že žiadne nepovolené znaky sa zobrazia. Všimnite si najmä, že to znamená DLL v priečinku "C:\Program Files" by sa mal prepočítať na jeho skrátený názov.
  2. <dllname>Nesmú obsahovať akékoľvek medzery alebo čiarky alebo úvodzovky. Toto je obmedzenie v príkazovom riadku analyzátor Rundll.</dllname>
  3. Vyššie príkazového riadka, nesmierne dôležitá je čiarka (,) medzi <dllname>a názov funkcie <entrypont>. Ak chýba čiarka oddeľovač Rundll alebo Rundll32 zlyhá bez uvedenia akýchkoľvek chýb. Okrem toho nemôže existovať žiadne biele medzery medzi <dllname>, čiarka, a <entrypoint>funkciu.</entrypoint> </dllname> </entrypont> </dllname>

Ako funguje Rundll

Rundll vykonáva nasledujúce kroky:
  1. Analyzuje príkazového riadka.
  2. Načíta zadanej knižnici DLL cez LoadLibrary().
  3. Získava adresu a <entrypoint>funkciu cez funkcia GetProcAddress().</entrypoint>
  4. Je volanie <entrypoint>funkcie, prechádzajúcou chvost príkazového riadka, ktorý je <optional arguments="">.</optional> </entrypoint>
  5. Keď funkcia <entrypoint>vráti, Rundll.exe unloads knižnicu DLL a výstupy. </entrypoint>

Ako napísať vaše DLL

Vaše DLL, zapíšte <entrypoint>funkcia s nasledujúce prototyp: </entrypoint>

16-bitové knižnice DLL:

  void FAR PASCAL __loadds
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
				
32-bit DLL:
  void CALLBACK
  EntryPoint(HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow);
				
Opäť, existujú 3 otázky zvážiť s funkciou EntryPoint:
  1. Je zrejmé, názov "EntryPoint" by mal byť nahradený skutočné meno funkciu vstupného bodu. Poznámka, že uvedenie Rundll32 bod je úplne nesúvisiacich DllEntryPoint funkcie v 32-bit DLL, ktoré rukoväte procesu a vlákno pripojiť/odpojiť oznámenia.
  2. Funkciu vstupného bodu pre Rundll32 musia byť definované s _stdcall volacej konvencie (spätné volanie predvolené pomocou _stdcall atribút). Ak atribút _stdcall chýba, potom funkcia predvolené _cdecl volacej konvencie a potom Rundll32 abnormálne ukončiť po volaní funkcie.
  3. Pretože funkcia musí vyhlásiť s _stdcall volacej konvencie, ako je popísané vyššie, vyplýva, že Visual c ++ kompilátor bude skutočne exportovať ho ako _EntryPoint@16 ak DLL je napísaný v c alebo bude používať ďalšie meno dekorácie ak DLL je napísané v C++. Takže buďte opatrní používať správne exportuje názov v príkazovom riadku pre Rundll alebo Rundll32. Ak chcete vyhnúť použitie zdobená názvy, použiť súbor .def a vývozných funkciu vstupného bodu podľa názvu. Pozrite si dokumentáciu produktu a článok o ďalšie informácie o názov dekorácie pri použití kompilátorov jazyka Visual C++:
    140485Vyvážajúci PASCAL-rovnako ako symboly v 32-bit DLL
Parametre, ktoré Rundll vstupný bod sú nasledovné:
   hwnd - window handle that should be used as the owner window for
          any windows your DLL creates
   hinst - your DLL's instance handle
   lpszCmdLine - ASCIIZ command line your DLL should parse
   nCmdShow - describes how your DLL's windows should be displayed
				
V nasledujúcom príklade:
     RUNDLL.EXE SETUPX.DLL,InstallHinfSection 132 C:\WINDOWS\INF\SHELL.INF
				
Rundll by volať funkciu InstallHinfSection() entrypoint Súboru SetupX.dll a preniesť ho nasledujúce parametre:
   hwnd = (parent window handle)
   hinst = HINSTANCE of SETUPX.DLL
   lpszCmdLine = "132 C:\WINDOWS\INF\SHELL.INF"
   nCmdShow = (whatever the nCmdShow was passed to CreateProcess)
				
Všimnite si, že je funkcia <entrypoint>(alebo InstallHinfSection() v nad príkladom), ktorý má analyzovať svoju vlastnú príkazového riadka (lpszCmdLine Parameter vyššie) a používať jednotlivé parametre podľa potreby. Rundll.exe analyzuje iba do voliteľné argumenty prešla na jeho príkaz riadok. Zvyšok parsování je na funkciu <entrypoint>. </entrypoint></entrypoint>

Osobitné poznámky o rozdieloch medzi Windows 95 A Windows NT

Pre systém Windows NT, Windows 2000 a Windows XP správanie Rundll32.exe je trochu iný, aby to vyhovovalo UNICODE príkazové riadky.

Windows NT najprv pokúsi GetProcAddress pre <entrypoint>W. Ak je táto vstupný bod, potom prototyp predpokladá sa: </entrypoint>
   void CALLBACK
   EntryPointW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine,
               int nCmdShow);
				
To je rovnaké ako ANSI EntryPoint, okrem prípadov, keď lpszCmdLine parameter je teraz reťazec UNICODE.

Ak bod <entrypoint>w vstupu sa nenašiel, potom systém Windows NT bude GetProcAddress pre <entrypoint>a a pre <entrypoint>. Ak sa o nich zistí, potom sa považuje za ANSI vstupného bodu a sa zaobchádza rovnakým spôsobom ako Systém Windows 95, 98 a Me. Preto, ak chcete, aby vaše DLL spustiť v systéme Windows 95 s podporou ANSI a na systém Windows NT/2000/XP s podpora UNICODE, by ste exportovať dve funkcie: EntryPointW a EntryPoint. Na Windows NT/2000/Me, EntryPointW funkcie sa bude nazývať UNICODE v príkazovom riadku; na Windows 95/98/Me, EntryPoint funkcie sa bude nazývať ANSI príkazového riadka. </entrypoint></entrypoint></entrypoint>

Vlastnosti

ID článku: 164787 - Posledná kontrola: 17. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft Win32 Application Programming Interface, pri použití s produktom:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
Kľúčové slová: 
kbdll kbFAQ kbinfo kbkernbase kbprogramming kbusage kbmt KB164787 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:164787

Odošlite odozvu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com