Как использовать существующий код C ++ в .NET (C #)

StackOverflow https://stackoverflow.com/questions/446758

  •  22-07-2019
  •  | 
  •  

Вопрос

Я хотел бы создать проект на C # и реализовать существующий собственный код (C ++).Кто-нибудь знает о каком-нибудь хорошем учебнике по этому поводу?

Спасибо!

Это было полезно?

Решение

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

Другие советы

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

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

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

Это введение в CodeProject это хорошая отправная точка.

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

В Статья в Википедии о P / Invoke есть ряд причин, по которым вы, возможно, не захотите использовать такой подход, с которыми я согласен:

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

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

Почему бы вам не попробовать управляемые оболочки для вашего кода на C ++.

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmg_accessingcodefromframeworkobjects.asp

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top