Philippe Mori
В дополнение ко всем вышеприведенным ответам, которые действительно хороши, я бы добавил некоторые трюки, которые могут вам помочь.
Насколько хорошо он будет работать, во многом зависит от исходного кода. Было бы хорошей идеей преобразовать его? Это тоже зависит. Такое преобразование может работать относительно хорошо для математических вещей или, возможно, шифрования. Напротив, это не будет хорошо работать, если ваш код зависит от многих библиотек C, сложных макросов...
Это будет до вас, чтобы оценить, какой вариант является лучшим:
- Попробуйте преобразовать код вручную.
- Переписать весь код на C# (и использовать только старый код в качестве ссылки).
- Поместите свой код C в библиотеку DLL и используйте его либо с P/Invoke, либо в сборке смешанного режима.
Вы можете начать с копирования существующего кода C в файл C# и поместить все функции в класс. Сделайте этот класс static
и все функции public static
.
Удалите включает в себя и другие специфические вещи c.
Для каждой функции в C код, сделать private static
функция с точно таким же именем, как и исходная. Например:
public static class ConvertCodeInC {
// Copy C code here...
// Sample function (add required using as appropriate for your code)
private static double fabs(double x) => Math.Abs(x);
private static void more_complete_function_here(int value)
{
// Some code here...
}
}
Вы также можете конвертировать макросы в константы или функции по мере необходимости. Типы обновлений.
Многое из этого можно сделать с помощью поиска и замены. Например, заменить
unsigned int
с
uint
. Также заменить
->
с
.
.
После того, как программа будет преобразована, вы можете сделать метод переименования, чтобы удалить бесполезные временные функции, такие как
fabs
в моем примере. Если функция используется всего несколько раз и является тривиальной, было бы проще немедленно обновить ее для вызова .Чистая эквивалентная функция.
Имейте в виду, что такие вещи, как поиск и замена, могут быть несколько опасны в подобном случае, поэтому часто сохраняйте и при необходимости подтверждайте каждое изменение.
После того, как код компилируется, вы можете сделать его более .NET, рефакторинг его для использования .Например, соглашение об именовании сети.