Импорт функций драйвера C ++ в проект C # - PullRequest
0 голосов
/ 13 марта 2019

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

Но эта проблема, с которой я столкнулся, полностью выходит за рамки моих возможностей, и все мои попытки сделать ее проще не проходят.

У меня есть решение VS с 6 C # проектами.И в двух проектах мне нужно вызывать функции родного драйвера USB C ++ из сторонних DLL.Мне дали сторонний dll, а также файл .h.Этот файл .H имеет все функции, объявления структур, которые, я думаю, я могу использовать при вызове из кода C #, используя [DllImport("dll file")] способ.

Файл .H содержит довольно большой список функций и структур, определенных в собственных базовых типах, которые нельзя использовать напрямую, поскольку типы в C # отличаются от C ++.

И ниже я вижу фрагмент кода в файле .H.

#ifdef FTD2XX_EXPORTS
#define FTD2XX_API __declspec(dllexport)     // Its used while dll compile
#else
#define FTD2XX_API __declspec(dllimport)         
#endif

И все функции украшены FTD2XX_API

Теперь мои вопросы:

  1. Приведенный выше фрагмент полезен, только если мы пытаемся импортировать (неуправляемый) C ++ dll в другой (управляемый / неуправляемый) проект C ++, но не в C #.И я должен зависеть только от interopservices в случае C #.Я прав?

  2. В файле .H определено так много структур и функций.Если мне нужно вызвать их, я должен написать новые структуры с типами C #, отображая их точно и вызвать функции с типами данных C #.Их так много, и выглядит неуклюже в будущем.Любой лучший способ?

  3. Могу ли я создать новый проект C ++ в этом решении VS вместе с другими проектами C #, чтобы обернуть управляемый код вокруг функций неуправляемого драйвера, а затем вызвать управляемые функции C ++из других проектов C #.Это вообще возможно?Что все, что мне нужно позаботиться.Все, что я хотел, - это лучшая архитектура для реализации этого, чтобы я мог использовать ее для других действий, а также без головной боли при смене типа для стольких функций и структур.

...