INFO: Volanie rutiny CRT výstup z GUI aplikácie

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

SUHRN

Použiť C Run-time výstup rutín, ako napríklad printf() z GUI žiadosti, je potrebné vytvoriť konzolu. Aplikáciou Win32 programovacie rozhranie (API) AllocConsole() vytvorí konzoly. CRT rutinné setvbuf() odstráni do medzipamäte tak, že výstup je okamžite viditeľná.

Táto metóda funguje ak GUI aplikácie je spustený z príkazového riadka alebo z programu Správca súborov. Avšak táto metóda nefunguje, ak aplikácia je začal Program Manager alebo prostredníctvom príkazu "Štart". Nasledujúce kód ukazuje, ako obísť tento problém:
   int hCrt;
   FILE *hf;

   AllocConsole();
   hCrt = _open_osfhandle(
             (long) GetStdHandle(STD_OUTPUT_HANDLE),
             _O_TEXT
          );
   hf = _fdopen( hCrt, "w" );
   *stdout = *hf;
   i = setvbuf( stdout, NULL, _IONBF, 0 );
				
Tento kód otvára nové low-level CRT rukoväť na správne konzoly výstup rukoväť, priradí nová prúd low-level popisovača a nahrádza STDOUT s týmto novým prúd. Tento proces sa stará o funkcie, ktoré používajú STDOUT, ako napríklad printf(), puts() a podobne. Použiť rovnaký postup STDIN a stderr.

Všimnite si, že tento kód neopravuje problémy súvisiace s rukoväťami 0, 1 a 2. V skutočnosti, kvôli iné komplikácie, nie je možné napraviť to, a preto je potrebné použiť prúd I/O namiesto low-level I/O.

DALSIE INFORMACIE

Zahájil GUI aplikácie pomocou príkazu "Štart", tri štandardné OS zvláda STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, a STD_ERROR_HANDLE sú všetky "preciachuje von" Autor Inicializácia konzoly rutiny. Tieto tri rukoväte nahrádzajú podľa platné hodnoty keď GUI uplatňovanie vyžaduje AllocConsole(). Preto, keď sa to deje, volá GetStdHandle() vždy vráti platným popisovačom hodnoty. Problém je, že CRT ukončenú inicializácia pred vašej žiadosti dostane šanca na volanie AllocConsole(); majú tri nízke rukoväte i / 0, 1 a 2 už boli nastavené na používanie originál preciachuje mimo OS kľučky, takže všetky CRT I/O sa odošle na neplatné popisovače OS a CRT výstup nie je zobrazený v konzoly. Použiť riešenie vyššie popísané na odstránenie tohto problému.

Ide o GUI aplikácie počnúc príkazového riadka bez príkaz "Štart", standard OS rukoväte nie sú správne preciachuje ale sú nesprávne zdedené z CMD.EXE. Keď žiadosť je CRT initializes, tri nízke rukoväte i / 0, 1 a 2 sú inicializované používať tri Popisovač čísla, ktoré uplatňovanie zdedí od CMD.EXE. keď, kedy uplatňovanie vyžaduje AllocConsole(), konzola inicializačnej rutiny pokúsite sa nahradiť, čo verí neplatnú Inicializácia konzoly štandardné OS zvládnuť hodnôt s platným popisovačom z novej konzoly. Autor: náhoda, pretože inicializačnej rutiny konzoly majú tendenciu dať von rovnaké tri hodnoty pre štandardné OS rukovätí, konzoly upgradeovali bude nahraďte štandardný OS rukoväť hodnoty rovnaké hodnoty, ktoré tam boli pred--tie zdedené z CMD.EXE. Preto, I CRT / funguje v tomto prípade.

Je dôležité si uvedomiť, že schopnosť používať CRT rutiny z GUI aplikáciu spustiť z príkazového riadka nebol dizajnom tak to nesmú Práca v budúcich verziách systému Windows NT alebo Windows. V budúcej verzii, môžete môžu potrebovať workaround nie len pre aplikácie začali na príkaz riadok „Štart <application name="">", ale aj pre aplikácie začali na Príkazový riadok s "názov aplikácie". </application>

Vlastnosti

ID článku: 105305 - Posledná kontrola: 10. 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á: 
kbconsole kbinfo kbkernbase kbmt KB105305 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:105305

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