встроенный C в C # и компиляция? - PullRequest
1 голос
/ 29 апреля 2011

Можно ли написать большую часть вашей программы, скажем, на C #, а затем раскрыть ее и выполнить определенные функции / объекты на C или C ++?

Я знаю, что вы можете вызывать скомпилированные .dll из C #;но вы можете сделать «встроенный» нативный C прямо из C #?Должны ли они быть "управляемыми" .dll?

Если нет, то я предполагаю, что есть интерфейс, подобный JNI?

Кроме того, еще один вопрос;Вы можете скомпилировать C # в «родной» машинный код?

MSVS2010 / Win7, если это имеет значение.

Ответы [ 2 ]

7 голосов
/ 29 апреля 2011

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

Тем не менее, вы можете встроить C (или даже сборку) в Managed C ++, позволяя объединять собственный код и управляемый код в одну сборку / dll.

Для .Net-эквивалентаJNI, (нативный код, вызывающий управляемый код), нормальный метод - использовать COM-взаимодействие или Managed C ++ - вы также можете разместить CLR, но это не так часто.

Что касается компиляции C # в «нативный»машинный код, читайте на NGen .

3 голосов
/ 29 апреля 2011

Собственный C / C ++ может быть вызван с помощью PInvoke (DllImport) из C # или с помощью кода C ++ / CLI (.NET C ++) или через COM.Это называется interop.

PInvoke требует предоставления собственного кода через DllExport.

C ++ / CLI и собственный код можно поместить в одну и ту же DLL или даже файл cpp.

C # (.NET) код компилируется в MSIL, который транслируется при первом доступе к машинному коду (JIT).Он может быть сохранен в расширенном GAC, уже переведенном в машинный код, однако это только улучшает первый доступ.

Эквивалентный код C # для кода C должен выполнять то же самое.C # даже разрешает указатели в небезопасном коде, но не с шаблонами, как в C ++.

MSIL даже имеет оптимизацию, позволяющую повысить производительность в случае купольных камер.

Я видел, как демонстрации параллельных вычислений выполнялись быстрееC # чем эквивалент C ++.

Если вы спроектируете свой C # с умом, производительность будет хорошей.То же самое относится к родному C / C ++.

...