1 | |||||||||||||||||||||
C++ CLI после C# и C++19.02.2017, 17:59. Показов 2282. Ответов 7
Метки нет (Все метки)
Несколько лет программировал на C# и не знал бед, пока не появилась задача скрыть некоторые функции по посторонних глаз (рефлектор, IlSpy и т д). Перебрав несколько вариантов, подумал остановиться на C++ CLI, т.к. в нем можно делать нативные вставки обычного С++.
Т.к. куча кода у меня на C# решил пойти таким путем: перенести все на C++ CLi. Прочитал про отличия в прикрепленной к этой ветке теме про Основные отличия C# от C++ CLI и приступил... Но тут же столкнулся с некоторыми вопросами: 1) Носит скорее теоретический характер: вроде как по умолчанию считается, что все объекты, массивы и тип стринг в C# передаются по ссылке. Почему при декомпиляции через рефлектор в VС++ все эти ссылочные типы предстают в виде управляемых указателей с пометкой ^ вместо скажем принятой в C++ CLI управляемой ссылки % ? Пришел к выводу, что ссылка - это в принципе тот же указатель, но с меньшими возможностями (если взять классический C++). Но все же какое-то ощущение не совсем равенства между ними остались:
Если же этого нет, то как так? Получается, что Майкрософт не развивает эту среду? 3) И третий вопрос у меня касается структур. В C# они имеют тип значение. Значит, живут в стеке. Что касается классического C++, то почти везде пишут, что структуры - это те же классы, только поля видимости у них по умолчанию public. То есть по идее они живут в куче. А структуры (управляемые) в C++ CLI передаются по ссылке(живут в куче) или по значению(в стеке)? 4) Оч. важно, т.к. для меня вообще не понятен такой код, но оч важен:
Его аналог на C#
0
|
19.02.2017, 17:59 | |
Ответы с готовыми решениями:
7
Изучение C++/CLI после С++ C# to C++/CLI c# ->c++/cli CLI |
21.04.2017, 09:56 [ТС] | 2 | ||||||||||
В общем раз никто не ответил, сам отвечу на свои вопросы как я их понял по истечению времени:
1) В С++ все построено на указателях. Это философия этого языка. Знака равенства между кодом C# и C++cli нет. Вообще в с++ делает явное разграничение в синтаксисе между обращениями к пространству имен либо статическому члену, обращением к экземпляру класса (или структуры) и обращением к экземпляру класса через указатель ("::","." и "->" соответственно). Тогда как в C# все делается через ".". Что это дает c++-шному программисту? По большому счету понимание. В C# даже если и знаешь, то все же редко задумываешься о том, по ссылке или по значению передается переменная. В практическом же смысле плюсов я не заметил. 2)Глюк VS2010. Его недоработка. Странная оплошность. О ней даже в русскоязычной вики написано, вроде там есть и какое-то решение... Но я перешел на VS2015, чтобы не томить судьбу. Впрочем и там автоподстановка в C++ cli все же сильно уступает C#, что заметно затрудняет (растягивает во времени) написание кода 3)Вопрос отпал, пока не пользовался структурами. Возможно все зависит от ключевого слова ref, но я не пробовал 4)Гугл был немногословен. Он выдал 3-4 ссылки на англоязычные ресурсы без комментариев. И все. На одном из них был пример кода с использованием подобных вещей. Все, что я понял, что там подключается какая-то сторонняя UML библиотека непонятного происхождения, поиск которой ничего не дал. Я не силен в UML и не стал искать дальше. В общем может кому пригодится события в с++ cli определяются примерно так:
И еще момент, по поводу смешения кодов: в неуправляемом классе можно обращаться к библиотекам .net и использовать управляемые классы. Но на это
2
|
Комп_Оратор)
|
|
22.04.2017, 20:40 | 3 |
netBool, много полезного есть в подзаголовке этого раздела с названием: "важные темы":
Преобразование между типами System::String, char*, wchar_t*, std::string и др. Коллекция полезных исходников, трюков и хаков C++/CLI Основные отличия C# от C++ CLI Создание, заполнение и управление динамическими массивами
0
|
23.04.2017, 17:00 [ТС] | 4 |
Их я прочитал прежде всего. Но там не были освещены эти вопросы достаточно подробно. Решил написать... Вообще тема C++ CLI в интернете мало освещена, в мсдн для него много раскрытых тем, хотя они есть для C# и VB.
Например, нигде я не находил информации о том, что .NET в C++ урезан. И то, к чему я привык на C# нельзя в C++. Даже тот же ToString(). Приходится все делать через Convert::ToString(...). Хотя автоподстановка под неработающие функции существует, что еще больше путает. Так же не работают некоторые перегрузки функций. При чем у меня VS2015, последняя
0
|
Комп_Оратор)
|
||||||
23.04.2017, 18:45 | 7 | |||||
Там есть почти всё о чем Вы пишете, но подробнее.
Вызывать метод нужно на указателе на объект:
0
|
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
|
|
06.06.2017, 16:09 | 8 |
0
|
06.06.2017, 16:09 | |
06.06.2017, 16:09 | |
Помогаю со студенческими работами здесь
8
C++/CLI дескрипторы Winsock c++/cli Встречайте C++/CLI C++/CLI (MVS) Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |