Member 10068530 Ответов: 1

Как использовать модули c++17 в управляемом коде?


Я хочу использовать модули c++17 из управляемого кода clr/c++. Возможно ли это?

Что я уже пробовал:

Я построил библиотеку dll с модулями c++. Потреблял его из консольного приложения, не поворачивая /clr. Все работало. Как только я включаю переключатель on /clr, он не работает.

Мое консольное приложение clr имеет следующие параметры командной строки.

/experimental:module /module:reference $(IntDir)\mod.ifc

Это ошибка, которую я вижу
D8016 '/clr' и '/experimental:module' параметры командной строки несовместимы ConsoleApplication2

CPallini

Пожалуйста, дайте подробное описание вашего сценария.

Rick York

Лично у меня была очень плохая примета, что делать. Когда я сделал C-обертки вокруг функций библиотеки, все работало просто отлично.

Member 10068530

Я думаю, что вам все еще нужно включить заголовки с оболочкой c. Удалось ли вам сделать это без включения заголовочных файлов?

Rick York

Да, но нам все еще нужно было определить прототипы интерфейса C для приложения. Это можно сделать с помощью заголовочного файла или просто встроенного для приложения, но это не требовалось для библиотеки, потому что она не использовалась для прототипов. Мы сделали это встроенным, поэтому нам не нужен был еще один заголовочный файл.

1 Ответов

Рейтинг:
2

steveb

Есть много способов сделать это:
1. реализуйте свой C++ 17 как DLL и экспортируйте интерфейс функции "C". В google есть тонна материалов о том, как вызывать библиотеки DLL из CLR или .Net langs.
2. Реализовать в виде DLL-библиотеки com. Этот язык может быть вызван любым языком VB, C#, C++, C и т. д
3. реализовать как COM EXE-сервер. Этот процесс может быть вызван любым языком плюс он может быть построен как 32-битный и может быть вызван из 64-битного процесса. И наоборот. Он известен как сервер вне процесса.
4. Реализовать его в виде службы Windows и назвать его через RPC. Именованные каналы или, например, TCP.
5. Реализовать его как обычный EXE-файл и перезвоните через RPC и т. д.