Я вполне уверен, что есть способ, но, вероятно, это плохая идея. Как бы вы гарантировали, что среда выполнения не вызывала какую-либо функцию CRT во время своей внутренней обработки, которая повлияла на errno
?
По той же причине вам также не следует звонить GetLastError
напрямую. DllImportAttribute
предоставляет свойство SetLastError
, поэтому среда выполнения знает, что нужно немедленно зафиксировать последнюю ошибку и сохранить ее в месте, которое управляемый код может прочитать, используя Marshal.GetLastWin32Error
.
Я думаю, что самая надежная вещь, которую вы могли бы сделать в этом случае, - это создать C DLL, которая выполняет как реальную работу C, так и захват errno
. (Обратите внимание, что простое написание обертки вокруг захвата errno
все равно будет иметь проблемы, упомянутые выше.)