Visual Studio 2010Win32 uygulamasında (bir WinMain ile girerek) printf çıktısını nasıl görüntüleyebilirsiniz?Visual Studio 2010'da bir Win32 uygulamasında printf çıktısı nasıl görüntülenir?
cevap
üzerinde test
, sen winbase.hOutputDebugString
işlevini kullanarak Visual Studio 2010 bir Win32 uygulaması, printf benzeri işlevleri kullanabilir.
Nasıl yapılacağını gösteren basit bir program yazdım.
#include <windows.h>
#include <stdio.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdShow, int nCmdShow)
{
int number = 10;
char str[256];
sprintf_s(str, "It works! - number: %d \n", number);
OutputDebugString(str);
return 0;
}
OutputDebugString
işlevi parametresi olarak bir LPCSTR
alır. Yazdırmadan önce dizeyi biçimlendirmek için sprintf_s
'u kullandım.
Bu, sonucu Visual Studio 2010 çıkış penceresine yazdırır.
Umarım yardımcı olur!
Açıkçası 256 sadece örnek var ama bu yaklaşımı seviyorum. Kesinlikle aklımda vardı. –
Elbette, sadece bir örnek. Kolaylık için bir sınıf/fonksiyona sarabilirsiniz. Memnun kaldım! Şerefe! – rbento
'wchar_t str [256]; wsprintf (str, L "Çalışır! - sayı:% d \ n", sayı); OutputDebugString (str); –
Bunu geçmişte AllocConsole işlevini kullanarak yaptığımı biliyorum, ancak beklediğimden biraz daha zor olduğunu da hatırlıyorum.
AllocConsole üzerinde hızlı bir Google araması, alakalı görünen bir Windows Developer Journal article olduğunu gösterir. Oradan, hatırladığım şeye benziyor, belirsiz olduğu gibi.
void SetStdOutToNewConsole()
{
int hConHandle;
long lStdHandle;
FILE *fp;
// Allocate a console for this app
AllocConsole();
// Redirect unbuffered STDOUT to the console
lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
fp = _fdopen(hConHandle, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
}
Bazı nedenlerden dolayı bu, renkli çıktı – paulm
Here is a page that will tell you how to do this, including sample code.
Daha sonra, AllocConsole() kullanarak bir konsol penceresi oluşturmak C standart dosya yeni konsol penceresinin kolları için kolları ilişkilendirmek gerekir.
Konsol penceresine ihtiyacınız vardır. Şimdiye kadar elde etmenin en kolay yolu bir linker seçeneğini değiştirmektir: Project + Properties, Linker, System, SubSystem = Console. bir ana() yöntemi ekleyin:
int main() {
return _tWinMain(GetModuleHandle(NULL), NULL, GetCommandLine(), SW_SHOW);
}
ile çalışmıyor. _tWinMain' yerine bir Win32 uygulaması için 'WinMain 'adlı ana işlevdir –
Teşekkür TORAK cevabın için. Bana çok yardımcı oldu.
Daha büyük bir geri kaydırma arabelleğe ihtiyacım vardı, bu nedenle API functions ürününe göz attıktan sonra birkaç ekleme yaptık. diye burada paylaşılan bu başka kimse yardımcı olur:
void SetStdOutToNewConsole()
{
// allocate a console for this app
AllocConsole();
// redirect unbuffered STDOUT to the console
HANDLE consoleHandle = GetStdHandle(STD_OUTPUT_HANDLE);
int fileDescriptor = _open_osfhandle((intptr_t)consoleHandle, _O_TEXT);
FILE *fp = _fdopen(fileDescriptor, "w");
*stdout = *fp;
setvbuf(stdout, NULL, _IONBF, 0);
// give the console window a nicer title
SetConsoleTitle(L"Debug Output");
// give the console window a bigger buffer size
CONSOLE_SCREEN_BUFFER_INFO csbi;
if (GetConsoleScreenBufferInfo(consoleHandle, &csbi))
{
COORD bufferSize;
bufferSize.X = csbi.dwSize.X;
bufferSize.Y = 9999;
SetConsoleScreenBufferSize(consoleHandle, bufferSize);
}
}
Bu 9999 hatlarına geri kaydırma (ekran tampon) yüksekliği artar. Kesinlikle sizin soruya cevap Windows XP ve Windows 7'de
Benim gibi kes-and-past'leri aramaları kaydetmek için, bir de
böyle bir şey giderdim VS çıktı penceresine yazdırmak da değişen mevcut Printf en gerektirmez ve olmaz bir başka yolu:
#define printf printf2
int __cdecl printf2(const char *format, ...)
{
char str[1024];
va_list argptr;
va_start(argptr, format);
int ret = vsnprintf(str, sizeof(str), format, argptr);
va_end(argptr);
OutputDebugStringA(str);
return ret;
}
...
printf("remains %s", "the same");
bir deha! – Skynight
- 1. Visual Studio assembler çıktısı nasıl adlandırılır?
- 2. C printf() wining with win32
- 3. Geçersiz win32 Uygulaması Visual Studio Uygulaması
- 4. Visual Studio uygulamasında Resim Hizalaması
- 5. PHP çalıştıran app_server 'syslog' çıktısı nasıl görüntülenir
- 6. Ui'deki json nesne çıktısı nasıl görüntülenir?
- 7. Visual Studio 2013 uygulamasında bellek profili oluşturma
- 8. Visual studio 2013'teki tüm kesme noktaları nasıl görüntülenir?
- 9. Visual Studio Kodunda Çıktı ve Hata Ayıklama Konsolu nasıl görüntülenir?
- 10. Visual Studio
- 11. Visual Studio 2013'teki kod incelemesi yorumları nasıl görüntülenir
- 12. Silverlight uygulamasında HTML nasıl görüntülenir?
- 13. Imleç Konumunu bir Win32 Konsol Uygulamasında Ayarlama
- 14. Visual Studio 2015 - ASP.Net uygulaması, Visual Studio
- 15. Visual Studio,
- 16. Visual Studio Projesi'nde Yeni Bir Visual Studio Projesi Nasıl Programlanır?
- 17. Kitaplık başlatması - Win32 uygulamasında pthread_once
- 18. Visual Studio,
- 19. Bir Windows Form uygulamasında Visual Studio Resim Kitaplığı PNG'lerini kullanma
- 20. Nasıl Visual Studio
- 21. Visual Studio
- 22. Visual Studio
- 23. Visual Studio
- 24. Visual Studio,
- 25. Visual Studio
- 26. Visual Studio
- 27. Android uygulamasında VAST reklamları nasıl görüntülenir?
- 28. Visual Studio 2012 projesine Visual Studio 2012
- 29. Visual Studio
- 30. Rmarkdown sunumunda (slidy) kod yankılamadan önce yığın çıktısı nasıl görüntülenir?
Uygulamayı kullanarak bir ayrı konsol penceresini açmak istiyor veya istediğiniz yapıyor musunuz ana uygulama penceresindeki bir kontrolde görüntülemek için? Ya da bir dosyaya kaydeder misin? –
Aslında, herhangi bir kodu değiştirmek zorunda kalmadan konsol çıktısını görebileceğiniz xcode konsol penceresi gibi bir şey umuyordum. Stdout'u gösteren bir günlük de iyi olurdu. –