говоря C от C#

Мне реализовали унаследованный код в C (не C++). Я хотел бы смочь назвать несколько методов в этом коде C из моего кода C# (в Windows). Каков был бы лучший подход для взаимодействия через интерфейс между двумя языками? Обратите внимание на то, что метод в C не является не сохраняющим состояние. Мы должны назвать два метода:

  1. инициализация () => это инициализирует структуру данных и загрузит данные из файлов в память. Этот метод назовут однажды.
  2. ComputeSomething (параметры) => будет несколькими вызовами от C# до этого метода.

Примечание: Эти два метода на самом деле называют несколько других методов, но это только два метода, которые мы хотели бы выставить C# (код является вполне сложным, вот почему мы не хотим портировать на C#),

Я смог импортировать код c в Visual Studio и способный скомпилировать код успешно. Я знаю, что мы можем, вероятно, реализовать код C как сервис окон, но я ищу решение, которые позволяют нам называть метод C от C# непосредственно. Любые указатели высоко ценятся! (взаимодействующий с COM связанный с тем, что я надеюсь делать?)

5
задан mwong 14 July 2010 в 22:28
поделиться

2 ответа

Похоже, для этого можно использовать P / Invoke . Посетите этот сайт для получения советов:

http://www.pinvoke.net/

Также попробуйте поискать в SO совет по P / Invoke и Google для

вызов c # pinvoke кода c

У меня нет под рукой технических примеров, но я написал код .NET, который вызывает API Win32 через P / Invoke . Сложная часть - правильно настроить сигнатуры методов при передаче параметров. Этот может вам там помочь.

10
ответ дан 18 December 2019 в 14:41
поделиться

Последняя версия Visual Studio позволяет писать код C ++, который может вызывать небезопасные функции, но при этом взаимодействовать с управляемым кодом CLR. Они называют это «неявным PInvoke» или «C ++ / CLR». Прочтите статью MSDN « Использование взаимодействия с C ++ », чтобы узнать больше.

Управляемый код не может вызывать неуправляемый напрямую, поэтому вам нужны функции оболочки для обработки проблем управления памятью и для преобразования между объектами .NET и структурами данных вашего приложения. По приведенной выше ссылке ознакомьтесь с разделом «Как выполнить перенос собственного класса для использования в C #».

2
ответ дан 18 December 2019 в 14:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: