Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2016, 16:44   #1
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию Корректный вызов функции из неуправляемой библиотеки

Здравствуйте, есть вот такой код из API:

Код:
HRESULT WINAPI BluetoothGATTGetServices(
  _In_      HANDLE               hDevice,
  _In_      USHORT               ServicesBufferCount,
  _Out_opt_ PBTH_LE_GATT_SERVICE ServicesBuffer,
  _Out_     USHORT               *ServicesBufferActual,
  _In_      ULONG                Flags
);
Почему то не получается его корректно вызвать в управляемом коде.

Вот как определяю его:

Код:
[DllImport("BluetoothApis.dll", CallingConvention=CallingConvention.StdCall)]
        static extern int BluetoothGATTGetServices(IntPtr hDevice, ushort ServicesBufferCount, IntPtr ServicesBuffer, ref ushort ServicesBufferActual, ulong Flags);
Вызов в функции:

Код:
IntPtr ptrt = IntPtr.Zero; // ЭТО СПЕЦИАЛЬНО ТАК СДЕЛАНО ДЛЯ ПРОВЕРКИ 
ushort serviceBufferCount = 0;

// из за нулевого указателя на устройство я должен получить hr результат отрицательный... 
int hri = BluetoothGATTGetServices(ptrt, 0, IntPtr.Zero, ref serviceBufferCount, BLUETOOTH_GATT_FLAG_NONE);
Почему то всегда вылетает с ошибкой PInvokeStackImbalance.
В чем может быть ошибка?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 13.01.2016, 17:04   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проблема с ULONG может быть.
он зависит от разрядности ОС, на 32 битной ОС он 32 бита должен быть.
так что боюсь его тоже придется через IntPtr тоже/

у вас какой разрядности приложение? ну и ОС.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 13.01.2016 в 17:09.
Пепел Феникса вне форума Ответить с цитированием
Старый 13.01.2016, 18:55   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
проблема с ULONG может быть.
он зависит от разрядности ОС, на 32 битной ОС он 32 бита должен быть.
так что боюсь его тоже придется через IntPtr тоже/

у вас какой разрядности приложение? ну и ОС.
ось 32, приложение для AnyCPU.
ладно попробую изменить ...
кстати встречал в инете пару таких вариантов но чтото не придал этому особого значения.
Спасибо.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вызов функции error() из какой библиотеки c++ (g++ + Linux)? chipside Общие вопросы C/C++ 6 13.08.2015 15:01
Wine::вызов linux библиотеки.so 220Volt Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 1 01.11.2013 00:00
Вызов метода библиотеки, загруженной браузером Zer0 Общие вопросы Delphi 0 31.03.2013 21:01
Мини бэйсик:объявление функции, вызов функции , возврат. AL_LORD Помощь студентам 2 14.10.2010 17:48
Создание и вызов библиотеки dll DM_bite Помощь студентам 3 15.06.2010 12:47