BILGI: CRT Çıktı yordamları, bir GUI uygulaması çağrı

Makale çevirileri Makale çevirileri
Makale numarası: 105305 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

C çalışma zamanı çıkış yordamlar, bir GUI uygulamasından printf() gibi kullanmak için bir konsol oluşturmak gereklidir. Win32 uygulama programlama arabirimi (API) AllocConsole() konsol oluşturur. Böylece çıkış hemen görülebilir arabelleğe alma CRT olağan setvbuf() kaldırır.

Bu yöntem, komut satırından veya Dosya Yöneticisi'nden GUI uygulaması çalışıyorsa kullanılabilir. Ancak, uygulama Program Yöneticisi'nden veya "Başlangıç" komutu aracılığıyla başlatılmışsa bu yöntem işe yaramaz. Aşağıdaki kod, bu soruna geçici bir çözüm bulmak gösterilmiştir:
   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 );
				
bu kod yukarı doğru konsol çıktısını tanıtıcı için yeni bir alt düzey CRT tanıtıcı açar, yeni bir akış, alt düzey bir tanıtıcı ile ilişkilendirir ve stdout, yeni akışı ile değiştirir. Bu işlem, printf() puts() ve diğerleri gibi stdout kullanan işlevlerin alır üstlenir. Stdin ve stderr, aynı yordamı kullanın.

Not Bu kod tanıtıcı 0, 1 ve 2 ile ilgili sorunları gidermez. Aslında, diğer bir zorluklar yüzünden bu sorunu gidermek, mümkün değildir ve bu nedenle, g/ç alt düzey g/Ç yerine kullanmak gereklidir.

Daha fazla bilgi

Ne zaman bir GUI uygulaması olan "Başlangıç"komutu, üç standart işletim SISTEMI STD_INPUT_HANDLE STD_OUTPUT_HANDLE ve STD_ERROR_HANDLE tüm sıfırlanmasını işleme"" tarafından konsolunu başlatma yordamlarına başlatıldı. GUI uygulaması AllocConsole() çağırdığında, bu üç tanıtıcısı geçerli değerlerle değiştirilir. Bu tamamlandığında, bu nedenle, GetStdHandle() arama her zaman geçerli tanıtıcı değerlerini döndürecektir. Sorun uygulamanız AllocConsole() arama olanağı alır önce CRT zaten başlatma tamamlandı; üç düşük g/Ç tanıtıcı 0, 1 ve 2 zaten OS tanıtıcıları dışında tüm CRT g/Ç için geçersiz bir OS tanıtıcıları gönderilir ve CRT çıkış konsoldaki görünmüyor Sıfırlı özgün kullanmak için ayarlanan. Bu sorunu gidermek için yukarıda açıklanan geçici çözümü kullanın.

GUI uygulaması olmadan "Başlangıç" komutunu komut satırından başlayarak olması durumunda, standart OS tanıtıcıları düzgün sıfırlanmasını DEĞIL, ancak yanlış CMD.EXE devralınır. Uygulamanın CRT başlatır, CMD.EXE uygulama devralan üç tanıtıcı sayıları kullanmak için üç düşük g/Ç tanıtıcı 0, 1 ve 2 başlatıldı. Uygulama AllocConsole() çağırdığında, konsol başlatma yordamlar konsolunu başlatma yeni konsolun geçerli tanıtıcı değerlerle geçersiz standart OS tanıtıcı değerler olarak inanmaktadır değiştirme girişiminde bulunur. Konsol başlatma yordamlar, aynı üç standart OS tanıtıcı değerlerini vermemelerini eğilimindedir çünkü coincidence tarafından konsol initilization standart OS tanıtıcı değerleri--CMD.EXE ' devralınmış olanlar önce var olan aynı değerlere sahip yerini alır. Bu nedenle, Bu durumda CRT g/Ç çalışır.

Bu nedenle, bu sürümü, Windows NT veya Windows ileride çalışmayabilir CRT yordamlar GUI uygulamadan komut satırından çalıştırma yeteneği tasarım gereği olmadığını bilmeniz önemlidir. Gelecekteki bir sürümde değil komut satırında "Başlangıç < uygulama adı >" ile başladı uygulamalar, ama bu aynı zamanda komut satırında "uygulama adı" ile başlatılan uygulamalar için geçici çözüm gerekebilir.

Özellikler

Makale numarası: 105305 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 4.2
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Win32 Uygulama Programlama Arabirimi, Ne zaman ne ile kullanilir:
    • Microsoft Windows NT Advanced Server 3.1
    • Microsoft Windows NT 4.0
    • Microsoft Windows NT 3.51 Service Pack 5
    • Microsoft Windows NT 4.0
    • Microsoft Windows 95
    • Microsoft Windows 98 Standard Edition
    • the operating system: Microsoft Windows 2000
    • Microsoft Windows Millennium Edition
    • the operating system: Microsoft Windows XP
Anahtar Kelimeler: 
kbmt kbconsole kbinfo kbkernbase KB105305 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:105305

Geri Bildirim Ver

 

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