Thông tin: G?i thói quen CRT đ?u ra t? m?t ?ng d?ng GUI

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 105305 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

TÓM T?T

S? d?ng c l?n ch?y ra thói quen, ch?ng h?n như printf(), t? m?t GUI ?ng d?ng, nó là c?n thi?t đ? t?o ra m?t giao di?n đi?u khi?n. ?ng d?ng Win32 l?p tr?nh giao di?n (API) AllocConsole() t?o ra giao di?n đi?u khi?n. CRT thư?ng l? setvbuf() lo?i b? vi?c đ?m đ? cho đ?u ra là có th? nh?n th?y ngay l?p t?c.

Phương pháp này ho?t đ?ng n?u ?ng d?ng GUI ch?y t? d?ng l?nh ho?c t? qu?n l? t?p tin. Tuy nhiên, phương pháp này không ho?t đ?ng n?u ?ng d?ng là b?t đ?u t? ngư?i qu?n l? chương tr?nh ho?c thông qua l?nh "b?t đ?u". Sau đây M? cho th?y làm th? nào đ? làm vi?c xung quanh v?n đ? này:
   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 );
				
M? này s? m? ra m?t m?i x? l? CRT c?p th?p đ?n đ?u ra giao di?n đi?u khi?n chính xác x? l?, k?t h?p m?t d?ng m?i v?i đó x? l? ? đ? cao th?p, và thay th? stdout v?i r?ng d?ng m?i. Quá tr?nh này s? chăm sóc c?a các ch?c năng s? d?ng stdout, ch?ng h?n như printf(), puts(), và vv. S? d?ng th? t?c tương t? stdin và stderr.

Lưu ? r?ng m? này không s?a v?n đ? v?i x? l? 0, 1 và 2. Trong th?c t?, do bi?n ch?ng khác, nó không th? đư?c s?a ch?a đi?m này, và V? v?y, nó là c?n thi?t đ? s? d?ng d?ng I/O thay v? ? đ? cao th?p I/O.

THÔNG TIN THÊM

Khi m?t ?ng d?ng GUI b?t đ?u v?i l?nh "b?t đ?u", ba h? đi?u hành tiêu chu?n x? l? STD_INPUT_HANDLE, STD_OUTPUT_HANDLE, và STD_ERROR_HANDLE t?t c? "zeroed ra" b?i kh?i t?o giao di?n đi?u khi?n thói quen. Nh?ng x? l? ba đư?c thay th? các giá b?i h?p l? tr? khi GUI ?ng d?ng các cu?c g?i AllocConsole(). V? v?y, m?t khi đi?u này đư?c th?c hi?n, g?i đi?n tho?i GetStdHandle() s? luôn quay tr? l?i giá tr? x? l? h?p l?. V?n đ? là có CRT đ? xong kh?i t?o trư?c khi đơn c?a b?n đư?c m?t cơ h?i đ? g?i AllocConsole(); các ba th?p I/O ch?t 0, 1 và 2 có đ? đư?c thi?t l?p đ? s? d?ng b?n g?c zeroed ra OS ch?t, v? v?y t?t c? CRT I/O đư?c g?i đ?n không h?p l? OS ch?t và CRT đ?u ra không xu?t hi?n trong các giao di?n đi?u khi?n. S? d?ng workaround mô t? ? trên đ? lo?i b? các v?n đ? này.

Các v? b?t đ?u ?ng d?ng GUI t? d?ng l?nh mà không c?n l?nh "b?t đ?u", các tiêu chu?n x? l? OS không chính xác zeroed ra, nhưng không chính xác đư?c th?a k? t? CMD.EXE. Khi các ?ng d?ng c?a CRT initializes, các ba th?p I/O ch?t 0, 1 và 2 đư?c kh?i t?o đ? s? d?ng nh?ng con s? ba x? l? các ?ng d?ng th?a hư?ng t? CMD.EXE. Khi vi?c áp d?ng các cu?c g?i AllocConsole(), bàn đi?u khi?n kh?i t?o thói quen c? g?ng đ? thay th? nh?ng g? kh?i t?o giao di?n đi?u khi?n tin là không h?p l? h? đi?u hành tiêu chu?n x? l? các giá tr? v?i giá tr? x? l? h?p l? t? bàn đi?u khi?n m?i. B?i trùng h?p ng?u nhiên, b?i v? các thói quen kh?i t?o giao di?n đi?u khi?n có xu hư?ng đ? cho ra ba giá tr? tương t? cho các tiêu chu?n OS ch?t, bàn đi?u khi?n initilization s? thay th? các giá tr? tiêu chu?n x? l? OS v?i cùng m?t các giá tr? mà đ? có trư?c khi--nh?ng ngư?i th?a hư?ng t? CMD.EXE. Do đó, CRT i/O ho?t đ?ng trong trư?ng h?p này.

Nó là quan tr?ng đ? nh?n ra r?ng kh? năng s? d?ng CRT thói quen t? m?t GUI ?ng d?ng ch?y t? d?ng l?nh không b?i thi?t k? v? v?y, đi?u này có th? không làm vi?c trong tương lai các phiên b?n c?a Windows NT ho?c c?a s?. Trong m?t phiên b?n trong tương lai, b?n có th? c?n các workaround không ch? cho các ?ng d?ng b?t đ?u vào l?nh d?ng v?i "b?t đ?u <application name="">", mà c?n cho các ?ng d?ng b?t đ?u vào d?ng l?nh v?i "tên ?ng d?ng". </application>

Thu?c tính

ID c?a bài: 105305 - L?n xem xét sau cùng: 17 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Win32 Application Programming Interface, khi đư?c dùng v?i:
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows Millennium Edition
T? khóa: 
kbconsole kbinfo kbkernbase kbmt KB105305 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:105305

Cung cấp Phản hồi

 

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