Мне реализовали унаследованный код в C (не C++). Я хотел бы смочь назвать несколько методов в этом коде C из моего кода C# (в Windows). Каков был бы лучший подход для взаимодействия через интерфейс между двумя языками? Обратите внимание на то, что метод в C не является не сохраняющим состояние. Мы должны назвать два метода:
Примечание: Эти два метода на самом деле называют несколько других методов, но это только два метода, которые мы хотели бы выставить C# (код является вполне сложным, вот почему мы не хотим портировать на C#),
Я смог импортировать код c в Visual Studio и способный скомпилировать код успешно. Я знаю, что мы можем, вероятно, реализовать код C как сервис окон, но я ищу решение, которые позволяют нам называть метод C от C# непосредственно. Любые указатели высоко ценятся! (взаимодействующий с COM связанный с тем, что я надеюсь делать?)
Похоже, для этого можно использовать P / Invoke
. Посетите этот сайт для получения советов:
Также попробуйте поискать в SO
совет по P / Invoke
и Google
для
вызов c # pinvoke кода c
У меня нет под рукой технических примеров, но я написал код .NET, который вызывает API Win32 через P / Invoke
. Сложная часть - правильно настроить сигнатуры методов при передаче параметров. Этот может вам там помочь.
Последняя версия Visual Studio позволяет писать код C ++, который может вызывать небезопасные функции, но при этом взаимодействовать с управляемым кодом CLR. Они называют это «неявным PInvoke» или «C ++ / CLR». Прочтите статью MSDN « Использование взаимодействия с C ++ », чтобы узнать больше.
Управляемый код не может вызывать неуправляемый напрямую, поэтому вам нужны функции оболочки для обработки проблем управления памятью и для преобразования между объектами .NET и структурами данных вашего приложения. По приведенной выше ссылке ознакомьтесь с разделом «Как выполнить перенос собственного класса для использования в C #».