создать обертку для библиотек c # - PullRequest
0 голосов
/ 19 июля 2011

Иногда было бы здорово, если бы я мог использовать некоторые другие программы dll и настраивать их. Например, есть устройство под названием usb uirt, где я могу отправлять ИК-сигналы с компьютера. Программное обеспечение, которое используется для отправки сигналов отстой, и драйверы от устройства поставляются с большим количеством DLL. В результате я попытался импортировать их в визуальную студию, но не смог создать ссылку. Наверное, потому, что, возможно, они были написаны на другом языке. Но кому-то удалось получить оболочку для этих библиотек, и когда я импортировал эти dll, это сработало, и я смог управлять устройством из c #, и это здорово.

В любом случае, мне просто было любопытно, и я хочу узнать больше об этом ... Как я могу сказать, когда я могу использовать эти DLL? На каком языке они где созданы? Я попытался погуглить это, и я нахожу такие вещи, как:

[DllImport("my.dll")]
static extern void methodA(UInt32[] data);

что означает []? Иногда они используют указатели ... Из моего опыта мне никогда не приходилось использовать указатели. Я всегда могу передать переменную в c # по ссылке или по значению плюс с помощью делегатов. Я не вижу необходимости в указателях, но, возможно, я ошибаюсь ... Мне интересно узнать обо всем этом. Какую фразу мне Google, чтобы узнать об этом?

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

То, что вы ищете, это P / Invoke .

Что означает []?

Это способ добавления атрибутов к вызовам функций. Это DllImportAttribute.

В качестве альтернативы, если вы имели в виду набор скобок в UInt32[], то это означает, что это массив из UInt32.

Иногда они используют указатели ...

Можно создавать указатели в коде C # unsafe, но для использования с P / Invoke есть лучшая система, называемая marshalling . Marshalling позволяет преобразовывать типы между вашим управляемым кодом C # и неуправляемым кодом в DLL. Например, существует класс IntPtr для представления указателей на целые числа, который вы можете использовать в объявлении метода, но обычно вы просто передаете обычное целое число, и код маршаллинга автоматически преобразует его для вас.

Как я могу сказать, когда я могу использовать эти DLL? На каком языке они где создавались?

Я не уверен, как определить, является ли данная DLL управляемой или нет, но в отношении того, на каком языке написана данная DLL, не имеет значения, и ее очень трудно определить после ее компиляции.

0 голосов
/ 19 июля 2011

[DLLImport] является атрибутом класса. Это стандартная часть C #. Подробнее об атрибутах можно прочитать здесь - Атрибуты (C # и Visual Basic)

Это [] в UInt32[] data означает, что это массив объектов UInt32. Это стандартная часть C #. Вы можете прочитать больше о массивах в C # здесь - Arrays (Руководство по программированию в C #)

...