Проблема (по крайней мере для конкретных случаев, которые вы упоминаете, например, расширения оболочки) при попытке «интегрироваться с .NET UI» заключается в том, что вы действительно не можете.Причина, по которой не стоит писать расширения оболочки в управляемом коде, состоит в том, что данный процесс может загрузить только одну версию CLR в любой момент времени.Если два расширения оболочки зависят от разных версий CLR, и они оба пытаются загрузить одновременно, произойдет сбой.Вы не можете каким-либо образом загружать CLR или форму в контексте вашего расширения оболочки и быть хорошим поведением расширения оболочки.
Мой совет будет не беспокоиться о C ++ до тех пор, пока у вас действительно не появится причинавыучить это (несмотря на то, что C ++ - мой любимый язык).Но когда вы изучаете C ++, оставьте свой багаж .NET у двери .Есть много вещей (таких как чрезмерное использование приведения, постоянное использование new
и т. Д.), Которые являются идиоматическими C # и просто неправильными в C ++.Вы будете намного счастливее, если не попытаетесь понять концепции C ++ с точки зрения CLR - просто потому, что C ++ там не работает.Вы можете использовать некоторые из шаблонов проектирования, которые вы, возможно, изучили для C #, но то, как работает базовый язык и машина, совершенно не зависит от двух языков.
Вероятно, наиболее запутанным отличием для новых программистов на C или C ++ являетсяКонцепция неопределенного поведения.Стандарты C и C ++ написаны таким образом, чтобы не привязываться к конкретной машине.Это резко контрастирует с такими архитектурами, как Java или .NET, где язык фактически определяется в терминах виртуальной машины (и, следовательно, чрезвычайно зависит от этой виртуальной машины).Это приводит к местам, где стандарт буквально не говорит, каким должен быть правильный вывод программы;и вместо этого говорит «однако основная машина обычно делает это».Вы, вероятно, заметите это совсем немного, если будете иметь дело с математикой с плавающей точкой.В то время как в C # существуют строгие и конкретные правила о том, как и где вычисляются и округляются числа с плавающей запятой, в C и C ++ таких квалификаций нет.
Как только вы понимаете C ++, вы можете перейти к COM и ATL.COM в основном разработан, чтобы сделать структуру класса, подобную C ++, доступной на языке (COM ABI), машине (сортировка между 32-битными и 64 процессами в одной системе и т. Д.) И местоположении (DCOM предоставляет средства RPC) независимым способом.Если вы не понимаете объектную модель C ++, у вас будет чрезвычайно трудное время с объектной моделью COM, потому что они чрезвычайно похожи.ATL - это набор шаблонов классов C ++, основанных на основах COM, которые просто обрабатывают некоторые из шаблонов для вас.