2009-01-15 3 views

ответ

4

Вы можете использовать P/Invoke, и вы можете вызвать неуправляемые методы. Я приведу вам несколько примеров: This - ссылка на официальную документацию MSDN. This - это веб-сайт сообщества с большинством обычных неуправляемых библиотек Windows, а также подписи методов и примеры

3

Если C++ код управляется (как вы говорите), то я полагаю, что вы оставить его в C++ если у вас есть очень веские основания - в будущем C# (и т.д.) сборки должны иметь возможность просто ссылаться на «как есть».

+0

Хорошее место - я пропустил это и прочитал его как «существующий * un * управляемый (C++) код». Учитывая контекст, это может быть опечатка. –

+0

Я нашел на опыте, что всегда стоит проверить очевидное первое - конечно, если это была опечатка, то много дали подходящие ответы –

+0

моя ошибка ... это родная C++ –

0

Возможно, самый простой способ сделать это - создать проект C++/CLI, который позволит вам смешивать управляемый и неуправляемый C++. Затем вы можете обернуть существующие неуправляемые классы C++ управляемой оболочкой .Net, которую ваш код C# может вызывать напрямую. Журнал MSDN имеет хороший вводный article на C++/CLI.

Взаимодействие действительно будет полезно только для вызова функций стиля C. Вы не можете использовать его для взаимодействия с чистыми классами C++.

0

Я узнал об этом, сделав это, поэтому у меня нет хорошего учебника, но есть пара вещей, которые вам нужно знать: управляемые C++ и C++/CLI интегрируются с неуправляемым кодом с очень небольшим количеством уродливых швов , Это не относится к C#. В управляемом C++, это вполне возможно сделать что-то вроде этого:

dotNetForm->Text = S"My Project"; // regular managed code 
::SetWindowText(dotNetForm->Handle, "Your Project"); // mixed managed/unmanaged 

, тогда как в C# вы должны P/Invoke в SetWindowText - не то, что вы на самом деле будет: это всего лишь простой пример, но вам нужно имейте в виду, что управляемый компилятор C++ - это странная комбинация, позволяющая вам делать много взаимодействия и прозрачно и ничего не делая для вас одновременно (т. е. он не будет подразумевать маскировку).

3

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

Я поклонник и недавний покупатель книги C++/CLI in Action, в которой есть пара полезных примеров глав в Интернете.

Это intro on CodeProject является хорошей отправной точкой.

У автора C++/CLI в Action есть ряд статей по CodeProject, прокрутите вниз до раздела C++/CLI на his index.

Wikipedia article on P/Invoke имеет целый ряд причин, почему вы не можете использовать этот подход, с которым я согласен:

  • потери печатал поддержки компилятором
  • возможные вопросы типа данных или выравнивания, как вы должны сопоставить типы вручную
  • необходимость штырю сборки мусора объекты

Лучшей отправной точкой на MSDN является summary article.