Мне не удалось заставить GetPreviewHandlerGUID () распознавать файл .txt, и мне пришлось напрямую вводить GUID.Вы можете увидеть, что идет не так, когда вы используете Project + Properties, Debug, отметьте Включить отладку неуправляемого кода.
Теперь отладчик остановится на проблеме и отобразит
`STATUS_STACK_BUFFER_OVERRUN встретился
Вершина стека вызовов выглядит следующим образом:
kernel32.dll!_UnhandledExceptionFilter@4() + 0x1a368 bytes
shell32.dll!___report_gsfailure() + 0xc8 bytes
shell32.dll!CRTFPreviewHandler::_StreamInCallback() + 0x74 bytes
msftedit.dll!CLightDTEngine::ReadPlainText() + 0xed bytes
msftedit.dll!CLightDTEngine::LoadFromEs() + 0x202b3 bytes
msftedit.dll!CTxtEdit::TxSendMessage() + 0x1e25f bytes
msftedit.dll!_RichEditWndProc@16() + 0x13d bytes
Проблема находится в функции StreamInCallback ().Он вызывается RichTextBox, который используется для отображения предварительного просмотра (msftedit.dll) для загрузки файла.В коде этой функции обратного вызова есть ошибка, она уничтожает «канарейку», которая используется для обнаружения повреждения фрейма стека из-за переполнения буфера.
Это часть контрмер, предпринятых Microsoftпредотвратить заражение вирусов из-за переполнения буфера.Параметр компиляции / GS в Visual Studio для языков C / C ++.После обнаружения CRT очень быстро завершает программу.Это происходит без получения исключения, стек нельзя безопасно развернуть, поскольку он был скомпрометирован.Соответственно, CLR не может перехватить исключение.
Эта ошибка относится только к программе просмотра файлов TXT.Вы ничего не можете с этим поделать, кроме как не использовать его.Сообщать об этой ошибке на connect.microsoft.com, вероятно, бесполезно, они закроют ее как «внешнюю».В противном случае это тонкий намек на то, что может случиться, если вы позволите неуправляемому коду запускаться внутри вашей программы;)