Как обернуть нативный файл .lib и .h с помощью c ++ / CLI для вызова функций из c#? Встроенный последовательный порт связи - PullRequest
0 голосов
/ 10 апреля 2020

Как и многие ранее, у меня также есть скомпилированная библиотека stati c (.lib), файл заголовочного файла (.h), на который она ссылается, но не исходный код. Эта библиотека обрабатывает связь с EEPROM от USB до последовательного чипа. Моя цель - вызвать эту библиотеку из C# в приложении WPF, которое позволит программировать EEPROM на встроенном устройстве. После недели исследований, которые я уже провел, по-видимому, мне нужно использовать C ++ / CLI, чтобы обернуть (.lib) адаптером типа logi c, который позволяет мне вызывать новый (.dll) содержащий неуправляемый код c из моего приложения WPF.

Я недоволен этими ссылками, а также многими другими:

Моя проблема в том, что они либо очень старые, недостаточно объяснительные, чтобы я мог связать их с моим проектом, либо они склонны концентрироваться на переносе классов. Я ДУМАЮ, что шаг 11 в блоге Том-Шелтона лучше всего объясняет, как обернуть класс. К сожалению, мне особенно необходимо понять, как применить это к структуре и функциям WINAPI, которые принимают эту структуру в качестве входных данных. Буду очень признателен за любую помощь, которую вы можете оказать.

CODE - (.h file)

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _SOME_STRUCT
{
    BOOL    bSomeBool;
    unsigned char Property1[2];
    unsigned char Property2[44];
}SOME_STRUCT;

BOOL    WINAPI  Function1(HANDLE hSerialPort);
BOOL    WINAPI  Function2(HANDLE hSerialPort,SOME_STRUCT* SomeStruct);

#ifdef __cplusplus
}
#endif

Это то место, где мне становится немного волосатым , Я не уверен, что смогу обернуть эту функцию, поскольку один из входных параметров hSerialPort - это РУЧКА. В частности, это РУЧКА, которая возвращается из неуправляемого вызова функции Microsoft CreateFile () . По ссылке

Функция возвращает дескриптор, который можно использовать для доступа к файлу или устройству для различных типов ввода / вывода в зависимости от файла или устройства и указанных флагов и атрибутов.

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

Возможно ли это реализовать?

...