в части C проекта C #: можно ли смешивать необработанный код C и C # (VS10) - PullRequest
0 голосов
/ 13 июля 2010

У меня есть проект на C # VS10. Я хочу, чтобы его часть была чистой C. Поэтому у меня будет чистая библиотека C и файл C #, который будет иметь часть с кодом C, вызывающим этот чистый Lib.

Так что у меня будет часть кода на C - не предварительно скомпилированная DLL, а файлы кода C и кода C #. Так возможно ли иметь внутри один C-файл C # код, как у нас есть C-код внутри C ++ кода?

как встроенный код C внутри C # ...

(я знаю, это может звучать странно, но мне это действительно нужно)

Возможно ли это? Буду ли я иметь возможность передавать данные из этой части C в C #?

Ответы [ 4 ]

3 голосов
/ 13 июля 2010

Вы можете использовать P / Invoke для вызова методов C из C #.

Однако, если у вас нет очень веских причин, я настоятельно рекомендую использовать stick для C # и не использовать C.


Невозможно смешивать код C и C # в одном файле.

Однако вы можете реплицировать любой код C (кроме вызова CreateRemoteThread) в необработанном C #, используя код unsafe и / или P / Invoke.

1 голос
/ 13 июля 2010

Существует бэкэнд CIL для gcc и несколько других попыток собрать компиляторы C в CIL.Они будут создавать стандартные библиотеки .Net, которые можно вызывать из C #, но они будут находиться в отдельных проектах.(Вам нужно было бы скомпилировать проект C в библиотеку и сослаться на него - хотя вы можете позже объединить их в одну сборку, если потребуется.) К сожалению, инструментов, доступных для разработки C на CIL, почти не хватает, поэтому я бы задал вопросстоит ли это вместо того, чтобы просто обернуть его с помощью p / invoke.С его помощью вы также получите снижение производительности, что является половиной причины использовать p / invoke, а не писать управляемый код в любом случае.

1 голос
/ 13 июля 2010

Нет, проекты C # не могут включать исходный код с других языков.

Тем не менее, вы можете использовать C ++ / CLI, который может быть напрямую связан с кодом C в одну сборку .NET. Самый простой путь - использовать C ++ / CLI, чтобы делать то, что вы планировали делать с C # - у него есть доступ ко всем библиотекам .NET, которые делает C #. Но вы также можете иметь как проект C ++ / CLI, содержащий код C, так и проект C #, и использовать ILMerge для объединения их в одну DLL.

0 голосов
/ 13 июля 2010

Вы можете использовать атрибут DllImport для вызова методов из вашей библиотеки C.Это называется вызовом платформы (или чаще P / Invoke).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...