Если очень хочется, то можно звать 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'ов.
вторник, мая 06, 2014
Что будет, если смешать C++ и C#
в 01:45:00
Подписаться на:
Комментарии к сообщению (Atom)
7 коммент.:
С++ API это вы STL имели ввиду?
2Мурадов Мурад
С++ API это вы STL имели ввиду?
Нет, это может быть любой API, написанный на C++. Win API, например.
По собственному опыту знаю, что гораздо веселее наступать на грабли при вызове managed кода из наличного приложения. И C++/CLI в данном случае только усугубляет ситуацию. Такое ощущение, что разработчики о таком сценарии если и думали, то только как о самом невероятном. Все ведь нынче пишут на .NET, ага. Еще радует, что, например, для TFS, например, клиентские либы поставляются только для .net
Недавно надыбал возможность экспортирования имен из дотнетовской либы. Правда написанной на С++/CLI. А вот небезопасный код на шарпе - это С++ или в шарпе добавили возможность работы с сырыми указателями ("->", &, *) и т. д.?
Говорят Майкросфт увольняет 16 тысяч своих сотрудников. Скажите, как у вас там обстоят дела?
Говорят Майкросфт увольняет 16 тысяч своих сотрудников. Скажите, как у вас там обстоят дела?
Действительно увольняют много народа, меня пока не уволили :-)
Как то давно читал про маршаллинг. Кажется эта статья. http://rsdn.ru/article/dotnet/interoperability.xml
По ней же написал курсовую - C# музыкальный плеер, с использованием С++ библиотеки.
Отправить комментарий