Вопрос

У меня есть небольшой или средний проект на C ++ / CLI.Я действительно ненавижу синтаксические расширения C ++ / CLI, и я бы предпочел работать на C #.Есть ли инструмент, который выполняет достойную работу по переводу одного в другое?

Редактировать: Когда я раньше говорил об управляемом c ++, я, очевидно, имел в виду c ++ / CLI

Это было полезно?

Решение

Вы можете перевести управляемый код C ++ (и код C ++ / CLI) в C # только в том случае, если код C ++ является чисто управляемым.Если это не так - т. е.если в исходные тексты включен машинный код, такие инструменты, как .NET Reflector, не смогут перевести код для вас.

Если у вас есть нативный код на C ++, я бы рекомендовал попытаться переместить нативный код в отдельную библиотеку DLL, заменить ваши вызовы функций DLL легко идентифицируемыми функциями-заглушками, скомпилировать ваш проект как чистый .Библиотека NET, затем используйте .NET reflector для декомпиляции в код C #.Затем вы можете заменить вызовы функций-заглушек вызовами p-invoke вашей собственной библиотеки DLL.

Удачи вам!Я сочувствую тебе!

Другие советы

.NET-управляемый C ++ подобен крушению поезда.Но заглядывали ли вы в C ++ CLI?Я думаю, Microsoft проделала отличную работу в этой области, чтобы сделать C ++ первоклассным .NET citizen.

http://msdn.microsoft.com/en-us/magazine/cc163852.aspx

Я не уверен, сработает ли это, но попробуйте использовать .Net Отражатель вместе с Отражение на языке подключаемый модуль.Подключаемый модуль RelelectionEmitLanguage утверждает, что преобразует вашу сборку в код c #.

Еще в 2004 году у Microsoft был инструмент , который преобразовывал управляемый C ++ в C ++ / CLI ...вроде того.Мы запустили это в паре проектов, но, честно говоря, объем работы по очистке проекта был не меньше, чем объем работы, который потребовался бы для выполнения преобразования вручную в первую очередь.Я не думаю, что инструмент когда-либо выходил в публичный релиз (возможно, по этой причине).

Я не знаю, какую версию Visual Studio вы используете, но мы управляли кодом C ++, который не будет компилироваться с Visual Studio 2005/2008, используя переключатель /clr: oldSyntax, и у нас все еще есть relic VS 2003 для этого.

Я не знаю ни одного полезного способа перехода с C ++ на C #...вы могли бы попробовать отключить его через отражатель :)

Такие проекты часто выполняются на c ++ / cli, потому что C # на самом деле не является элегантным вариантом для решения этой задачи.например ,если вам нужно взаимодействовать с некоторыми родными библиотеками C ++ или выполнять очень высокопроизводительные работы на низкоуровневом C.Поэтому просто убедитесь, что у того, кто выбрал c ++ / cli, не было веской причины делать это, прежде чем выполнять переключение.

Сказав это, я очень скептически отношусь к тому, что есть что-то, что делает то, о чем вы просите, по той простой причине, что не весь код C ++ / cli переводим на C # (и, вероятно, наоборот тоже).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top