İşte WINAPI en WriteFile kullanan bir "Merhaba dünya" programı (Microsoft Visual C++ 2008 Express derlenmiş): Bir konsol penceresi idam EğerStandart çıktıya yazarken WriteFile neden çöküyor?
int _tmain(int argc, _TCHAR* argv[])
{
wchar_t str[] = L"Hello world";
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if(out && out!=INVALID_HANDLE_VALUE)
{
WriteFile(out, str, sizeof(str), NULL, NULL);
CloseHandle(out);
}
return 0;
}
, bu mutlu dünyayı karşılıyor. Eğer WriteFile içinde
hello.exe > output.txt
programı çöker (BOŞ işaretçi istisna) olduğu gibi, ancak, standart çıktıyı yeniden denerseniz. Bununla birlikte, output.txt var ve tümüyle doğru çıktıyı içeriyor.
kazasında çağrı yığını:
[email protected]() + 0x75 bytes
[email protected]() + 0x4e bytes
srgprc2.exe!wmain(int argc=1, wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++
iletisi: "0x75ce85ea de işlenmeyen özel durum (KernelBase.dll) srgprc2.exe içinde: 0xc0000005:. Erişim ihlali yazma yeri 0x00000000"
Neler oluyor burda? Teşekkürler!
CloseHandle() çağrısını kaldırın. –
... açık olması gerektiği gibi, bir 'Get ...' işlevi, bir 'Open ...' fonksiyonu değil. –
CloseHandle bile çağrılmıyor, kaza WriteFile'da gerçekleşiyor ve program sonlandırılıyor. – user38329