Как мне написать свою библиотеку на C ++ для использования в .NET? - PullRequest
4 голосов
/ 14 октября 2011

У меня есть прототип для библиотеки, написанной на C ++.Это сильно загружает процессор, поэтому я написал одну часть в C (из-за инструментов) мясо в C ++ и использовал пользовательские распределители памяти и различные вещи.

Я хотел бы использовать эту библиотеку в .NET.Я не совсем уверен, как я должен это сделать.Похоже, мне нужно либо написать интерфейс C и написать оболочку в .NET для использования управляемого C ++, который, как я полагаю, у меня точно такой же код, за исключением того, что я добавляю один или два файла и пишу для них управляемый класс.

О каких льготах или ограничениях я должен знать, если я пойду управляемым маршрутом?

Ответы [ 2 ]

4 голосов
/ 14 октября 2011

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

http://msdn.microsoft.com/en-us/magazine/cc163852.aspx

Надеюсь, это поможет!

3 голосов
/ 14 октября 2011

Это зависит от "поверхностного контакта" между вашей библиотекой C ++ и вашим кодом .NET (кстати, вам нужно будет представить его как DLL любым способом, который вы выберете)

Если у вас действительно есть полностью объектно-ориентированная библиотека с классами, методами, свойствами, т.е. объектной моделью, вы можете выбрать C ++ / CLI , поэтому интеграция будет достаточно прозрачной. Недостатком является то, что вам придется понимать некоторые его тонкости (и я думаю, что у вас также есть некоторые ограничения относительно того, как вы будете встраивать среду выполнения MSVC).

Если вы можете сократить API до конечного набора методов, тогда вы можете просто экспортировать некоторые из этих методов и использовать P / Invoke (атрибут DllImport. См. Этот учебник здесь: Учебник по платформе ). В этом случае убедитесь, что представленные параметры будут использоваться уровнем .NET (не используйте сложные типы C / C ++, указатели на указатели на указатели, ..., не используйте классы C ++, ...), и попробуйте убедиться, что выделение памяти будет выполнено стороной .NET.

PS: в качестве примечания следует подумать о 32-битной / 64-битной проблеме. Будет ли DLL доступна в 64-битной версии? Будете ли вы распространять обе версии? .NET способен на оба.

...