вторник, мая 06, 2014

Что будет, если смешать C++ и C#

Если очень хочется, то можно звать C++ методы из C# кода и наборот. Например, если какие-то приятные функции есть в C++ API, но их нет в C#, их можно подключить следующим образом: Mixing .NET and native code

Все это выглядит легко и просто на таких маленьких примерах. Однако, если приложение у вас несколько больше размером, то начинают всплывать неприятные проблемы. Итак, проблемы, которые встретились мне.

Порча C# кучи
Если у вас намешан C++ и C# код, то из C++ можно залезть в C# кучу. Поробнее проблема разобрана в блоге Тесс Феррандес: .NET Crash: Managed Heap Corruption calling unmanaged code
Кстати, очень рекомендую ее блог. В постах до 2011 года она пишет про отладку, про WinDbg.

Потеря AppDomain
При переключении между C++ и C# кусками можно потерять текущий C#-контекст. Текущую директорию, например, что неприятно. Есть способы борьбы, которые работают не всегда.
Вот тут человек разбирает конкретный пример: Unmanaged callbacks across AppDomains.
Также есть разные кривые методы получения списка всех AppDomain'ов.

7 коммент.:

Мурадов Мурад комментирует...

С++ API это вы STL имели ввиду?

Alena комментирует...

2Мурадов Мурад
С++ API это вы STL имели ввиду?

Нет, это может быть любой API, написанный на C++. Win API, например.


Nik комментирует...

По собственному опыту знаю, что гораздо веселее наступать на грабли при вызове managed кода из наличного приложения. И C++/CLI в данном случае только усугубляет ситуацию. Такое ощущение, что разработчики о таком сценарии если и думали, то только как о самом невероятном. Все ведь нынче пишут на .NET, ага. Еще радует, что, например, для TFS, например, клиентские либы поставляются только для .net

Виталий Голованов комментирует...

Недавно надыбал возможность экспортирования имен из дотнетовской либы. Правда написанной на С++/CLI. А вот небезопасный код на шарпе - это С++ или в шарпе добавили возможность работы с сырыми указателями ("->", &, *) и т. д.?

Анонимный комментирует...

Говорят Майкросфт увольняет 16 тысяч своих сотрудников. Скажите, как у вас там обстоят дела?

Alena комментирует...

Говорят Майкросфт увольняет 16 тысяч своих сотрудников. Скажите, как у вас там обстоят дела?

Действительно увольняют много народа, меня пока не уволили :-)

Богдан Осинный комментирует...

Как то давно читал про маршаллинг. Кажется эта статья. http://rsdn.ru/article/dotnet/interoperability.xml
По ней же написал курсовую - C# музыкальный плеер, с использованием С++ библиотеки.