Как использовать Windows API в Qt |
Здравствуйте, гость ( Вход | Регистрация )
Как использовать Windows API в Qt |
peperoni |
17.11.2013, 15:54
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 17.11.2013 Пользователь №: 3979 Спасибо сказали: 0 раз(а) Репутация: 0 |
Подскажите как подключать динамически стандартные DLL Windows и использовать вызовы к функциям Windows API?
Полагаю нужно что-то прописать в файле проекта, но что кокретно так и не понял. Например, как заставить в QtCreator скомпилиться и запуститься простенькому консольному приложению взятому из MSDN, использующего CryptoAPI. Примерчик просто выводит список доступных криптопровайдеров на консоль. Проверил его в VisualStudio - все рабоате, в QtCreator бился с LIBS += ..., но так и не победил. Нужно под MinGW. Выдает ошибку E:\PROG\Qt\untitled1\main.c:-1: ошибка: undefined reference to `CryptEnumProviders' Вызовы к функция CryptoAPI в дальнейшем планируется использовать в программе написанной с ипользованием библиотеки Qt.
|
|
|
Iron Bug |
17.11.2013, 21:03
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
смотришь, в какой библиотеке твоя функция - и подключаешь её. и так далее, пока не скомпилится. смотреть можно, например, в MSDN, в сети.
только нафига тогда юзать Qt, если WinAPI наглухо убивает кроссплатформенность программы? Сообщение отредактировал Iron Bug - 18.11.2013, 8:22 |
|
|
peperoni |
18.11.2013, 19:33
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 17.11.2013 Пользователь №: 3979 Спасибо сказали: 0 раз(а) Репутация: 0 |
Если возможно, то можно конретно указать какие строчки нужно записать в файл проекта, чтобы запустился выше приведенный примерчик в QtCreator. Для "чайников" пожалуйста. Например, используемые функции CryptoAPI содержаться в библиотеке Advapi32.dll. Как сделать чтобы данная библиотека автоматически загружалась в момент запуска программы?
На а по поводу Qt - кросплатформенность это не единсвенное достоинство данного фреймвока. |
|
|
Litkevich Yuriy |
19.11.2013, 13:04
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kuzulis |
19.11.2013, 14:00
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 393 Регистрация: 29.6.2009 Пользователь №: 862 Спасибо сказали: 36 раз(а) Репутация: 7 |
Цитата undefined reference to `CryptEnumProviders' Эмм.. Вообще-то нету у MinGW этой функции, она не декларирована в его заголовках, следовательно ты ничего не прилинкуешь в этом случае. Тебе нужно использовать QLoadLibrary для подгрузки Advapi32.dll, найти там свою ф-ю CryptEnumProviders() и юзать ее. Хотя.. Можешь попробовать сделать LIBS += lAdvapi32 и посмотреть что будет.. ЗЫ: Хотя, сигнатура этой ф-ции присутствует в MinGW-шном файле libadvapi32.a. Тогда, ИМХО, просто объяви ее у себя в коде и слинкуйся с lAdvapi32.. В этом случае #include <Wincrypt.h> не нужен.. Может сработает. Сообщение отредактировал kuzulis - 19.11.2013, 14:05 |
|
|
peperoni |
19.11.2013, 16:56
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 17.11.2013 Пользователь №: 3979 Спасибо сказали: 0 раз(а) Репутация: 0 |
Точно. Оказывается wincrypt.h который в Windows SDK отличается от того который в QtSDK для MinGW. В Qt SDK какой-то урезанный - не все функции описаны. Скопировал описание функций в исходник примерчика из Windows SDK и заработало! Самое интресное ничего не добавлял в файл проекта! Как только правильная библиотека загружается не понятно...
|
|
|
Текстовая версия | Сейчас: 2.1.2025, 21:28 |