Я пытался получить библиотеку C (DLL), которая работает с некоторым простым тестовым кодом на C#. До сих пор я мог просто импортировать и использовать простые функции. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что я не знаю, как получить сложный тип возвращаемого типа из этой импортированной функции.Как обрабатывать сложный тип возвращаемого типа из C DLL-файла в C#?
Вот две функции подписи:
C:
#define HID_API_EXPORT __declspec(dllexport)
#define HID_API_CALL
struct hid_device_info HID_API_EXPORT * HID_API_CALL hid_enumerate(unsigned short vendor_id, unsigned short product_id);
C#:
[DllImport("hidapi.dll")]
public static extern hid_device_info hid_enumerate(ushort vendor_id, ushort product_id);
А вот две Структуры:
C:
struct hid_device_info {
char *path;
unsigned short vendor_id;
unsigned short product_id;
wchar_t *serial_number;
unsigned short release_number;
wchar_t *manufacturer_string;
wchar_t *product_string;
unsigned short usage_page;
unsigned short usage;
int interface_number;
struct hid_device_info *next;
};
C#:
[StructLayout(LayoutKind.Sequential)]
public struct hid_device_info
{
public IntPtr path;
public ushort vendorid;
public ushort productid;
public IntPtr serialnumber;
public ushort releasenumber;
public IntPtr manufacturer;
public IntPtr product;
public ushort usagepage;
public ushort usage;
public int interfacenumber;
public IntPtr next;
}
В настоящее время я получаю эту ошибку, когда я запускаю программу:
Управляемые DEBUGGING Помощник 'PInvokeStackImbalance' обнаружил проблемы в «C: \ Users \ tajensen \ Documents \ hidapiCS \ hidapitest \ Bin \ Debug \ hidapitest.vshost.exe.
Дополнительная информация: вызов функции PInvoke 'hidapiCS! HidapiCS.hidapi :: hid_enumerate' имеет несбалансированный стек. Это, скорее всего, потому, что управляемая подпись PInvoke не соответствует неуправляемой целевой сигнатуре. Убедитесь, что соглашение о вызове и параметры сигнатуры PInvoke совпадают с целевой неуправляемой подписью .
Я сделал немного копать и единственное, что я смог найти описания, как получить типы возвращаемых очень простых структур (т.е. без каких-либо указателей, а только основные типы, такие как Интс и BOOLS). Я бы очень признателен за дополнительную информацию по этому вопросу, поскольку я знаю, где я хочу быть, но я не знаю достаточно о таком коде, чтобы копать глубже сам по себе.
Спасибо заранее, Toms
Ну, это сработало для меня! Это было намного проще, чем я думал, ха-ха. –