Использование функций C в программе C#

У меня есть несколько функций C, которые я хотел бы использовать в своем приложении C# без необходимости изменять их, как они уже есть. Есть ли ПРОСТОЙ способ их использования без необходимости разбивать их на DLL или это единственный путь вперед? Могу ли я просто указать прямой путь к месту, где находятся эти файлы, и использовать их в своем приложении C#?

Отвечает ли это на ваш вопрос? Можно ли встроить код C в проект C#?

41686d6564 stands w. Palestine 05.05.2022 21:22

C является компилируемым языком. Вам нужно скомпилировать этот код, прежде чем вы сможете его выполнить. В идеале в DLL, чтобы потом можно было вызывать их через P/Invoke. Но в противном случае нет, компилятор C# не может скомпилировать код C. Единственный другой подход, который я могу придумать, - это переписать код C в C# или обернуть его в проект C++/CLI.

Etienne de Martel 05.05.2022 21:22

Если они не в .dll/.so, то где они?

ikegami 05.05.2022 21:22

@ikegami находятся в соответствующих файлах .c, расположенных в отдельном каталоге от приложения C#.

Justin 05.05.2022 21:25

C не является языком, который интерпретируется во время выполнения. Как вы ожидаете, что это сработает? Обрабатываются ли файлы C препроцессором с какими флагами?

Cheatah 05.05.2022 21:30

Re "они находятся в соответствующих файлах .c", .c файлы содержат исходный код, а не исполняемый код. Вы спрашиваете, как выполнять функции, поэтому они нужны вам в их исполняемой форме. Вам нужно будет их скомпилировать.

ikegami 05.05.2022 21:33
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
48
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, у вас есть куча файлов C, лежащих вокруг вашего проекта. Они содержат функции, которые вы хотите вызывать из кода C#. Достаточно справедливо, конечно, поэтому давайте посчитаем возможные способы достижения этого.

  1. Перепишите эти функции на C#. На самом деле это может быть наиболее разумным вариантом, если эти функции не используются где-либо еще (например, в отдельном проекте C), потому что тогда вам не нужно поддерживать код на двух разных языках для одного и того же проекта. C# также имеет много преимуществ по сравнению с C, таких как безопасность и выразительность, и в зависимости от того, что делают эти функции, вы можете даже не увидеть существенной разницы в производительности.
  2. Поместите этот код в собственную DLL, экспортировать эти функции, и используйте P/Invoke из C# для их вызова. Это то, что требует наименьшей модификации исходного кода.
  3. Напишите оболочку C++/CLI, которая вызывает эти функции, и вызовите код C++/CLI из C#. Это особенно полезно, если вы хотите представить интерфейс в стиле ООП для кода C#.
  4. Используйте интерпретатор C для выполнения этих C-файлов, как если бы они были скриптами. Это, вероятно, будет медленнее, более хрупким, трудным в обслуживании, и могут быть другие ограничения в зависимости от того, какой интерпретатор вы используете и как выглядит ваш код C.

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