Использование API C или C ++ в приложении C # - PullRequest
1 голос
/ 28 августа 2009

У меня есть небольшое сомнение относительно разработки Windows Mobile, возможно ли использовать c или C ++ Apis в приложении C # и наоборот? Если это возможно, как это должно быть сделано?

Ответы [ 4 ]

2 голосов
/ 28 августа 2009

Когда я впервые начал использовать механизм P / Invoke, я обнаружил, что просмотр примеров очень полезен. Оказывается, что "P / Invoking" многие функции Win32 C-API описаны в pinvoke.net

1 голос
/ 28 августа 2009

Вы можете использовать «нормальные» C-API через так называемые вызовы P / Invoke («Платформа Invoke»). Это включает в себя как Windows API, так и другие библиотеки, которые экспортируют обычные вызовы функций. Однако я не знаю, какие библиотеки C ++ возвращают объекты. Это может быть сложнее ...?

В Windows вы всегда можете создать свою .NET DLL так, чтобы ее можно было зарегистрировать как библиотеку COM. Затем вы можете использовать открытые классы .NET, как и любой другой COM-объект из любого языка, который поддерживает использование COM-объектов (например, VB6, Delphi, C ++ и т. Д.).

Это, однако, не работает в Windows Mobile!

Итак: Использовать C-API из C # на любой платформе - да, нет проблем, научитесь P / Invoke Использовать C # DLL из C ++ в Windows - да, нужно создавать COM-объекты Использование C # DLL из C ++ в Windows Mobile - AFAIK, который не работает

1 голос
/ 28 августа 2009

Если у вас есть встроенная DLL с экспортированными функциями C, вы можете легко использовать их через механизм P / Invoke.

Классы C ++, однако, довольно сложны и подвержены ошибкам из C ++. Для этого вам лучше написать оболочку для управляемой сборки на C ++ / CLI. Это создаст сборку .NET, которую вы можете использовать из C #, и вы сможете использовать библиотеки C ++ так же, как из обычного проекта C ++.

0 голосов
/ 28 августа 2009

C очень прост, C ++ более сложен из-за искажения. Прочитайте это описание .

...