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





Вы можете использовать P / Invoke и вызывать неуправляемые методы. Я отправлю вам несколько примеров: Этот - это ссылка на официальную документацию MSDN. Этот - это поддерживаемый сообществом веб-сайт с большинством распространенных неуправляемых библиотек Windows, а также сигнатурами методов и примерами.
Почему бы вам не попробовать управляемые оболочки для вашего кода на C++.
Если ваш код C++ управляется (как вы говорите), я бы посоветовал вам оставить его как C++ пока не, у вас есть очень веская причина - будущие сборки C# (и т. д.) Должны иметь возможность просто ссылаться на него как есть '.
Я на собственном опыте убедился, что всегда стоит сначала проверить очевидное - конечно, если это была опечатка, то многие дали подходящие ответы.
моя ошибка ... это родной C++
Вероятно, самый простой способ сделать это - создать проект C++ / CLI, который позволит вам смешивать управляемый и неуправляемый C++. Затем вы можете обернуть существующие неуправляемые классы C++ управляемой оболочкой .Net, которую ваш код 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 / Invoke в SetWindowText - не то, чтобы вы действительно это сделали: это всего лишь простой пример, но вам нужно знать, что управляемый компилятор C++ - это странная комбинация прозрачного выполнения большого количества взаимодействия для вас и в то же время ничего не делает для вас (т. е. не будет делать неявного маршаллинга).
Я предполагаю, что под реализовать существующий код вы имеете в виду, что хотите вызвать его из C# с минимальными изменениями в коде C++.
Я поклонник и недавний покупатель книги C++ / CLI в действии, в которой есть несколько полезных примеров в Интернете.
Этот введение в CodeProject - хорошая отправная точка.
У автора C++ / CLI in Action есть ряд статей о CodeProject, прокрутите вниз до раздела C++ / CLI на его индекс.
У Статья в Википедии о P / Invoke есть ряд причин, по которым вы, возможно, не захотите использовать этот подход, с которыми я согласен:
Лучшая отправная точка в MSDN - это сводная статья.
Хорошее место - я пропустил это и прочитал как «существующий код ООНmanaged (C++)». Учитывая контекст, это вполне могла быть опечатка.