Комментарии 7
Странный у вас способ себе в ногу стрелять. Вполне очевидно, что можно «испортить» внутреннее представление многих .NET-типов, после чего программа будет вести себя плохо. Что касается P/Invoke, то тут нужно разговаривать именно о неуправляемом коде и ошибках в нём, а не о сайд-эффектах после возвращения в управляемое окружение. Я считаю, что вы не с того конца обсуждение начали, морали нет. Если бы было что-нибудь в духе «В коде на С++ легко сделать вот такую ошибку, после чего при использовании P/Invoke из .NET могут быть такие-то проблемы; поступайте так-то, проверяйте то-то, не забывайте писать вот такие-то тесты», то пользы от статьи было бы намного больше.
Спасибо за полезные замечания, да, начал в другого конца, про внутренности типов, а не про случаи использования. Про конкретные кейсы на C++ будет позже продолжение.
Однако, полагаю, что и при программировании на чистом C# будет полезным помнить об устройстве типов.
Однако, полагаю, что и при программировании на чистом C# будет полезным помнить об устройстве типов.
И, да в коде на C++ ошибки может и не быть, но в C# через P/Invoke случай нужно будет корректно обработать.
а ведь на подобное поведение вполне можно наткнуться при вызове неуправляемых функций через P/Invoke (на эту тему будет продолжение)
Случайно речь не о трех видах boolean (default marshaling for boolean types)?
Без обид, но это скорее укол в попу :)
Неплохо было бы таки написать, что выведет приведенный код, и как добиться разных output'ов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
C#: как «выстрелить себе в ногу»