У меня проблема с одним из моих проектов.
Я использую QtCreator с MinGW и Qt 5.4.0
Когда я пытаюсь скомпилировать, эта простая строка вызывает у меня несколько ошибок:
CryptUnprotectData(data.password, NULL, NULL, NULL, NULL, (DWORD) 0, data.uncryptedPassword);
(с DATA_BLOB * data.password и DATA_BLOB * data.uncryptedPassword)
Получает меня :
undefined reference to `_imp__CryptUnprotectData@28'
Как сказано в заголовке, я включил файл Crypt32.Lib в свой .pro:
QT += core gui
QT += sql
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = ChromePass
LIBS += -L$$PWD/ -lCrypt32
TEMPLATE = appSOURCES += main.cpp\
mainwindow.cpp \
chromehandler.cpp \
passdata.cpp
HEADERS += mainwindow.h \
chromehandler.h \
passdata.h
FORMS += mainwindow.ui
И, как указано в MSDN API, включен wincrypt.h:
#include <windows.h>
#include <wincrypt.h>
#include <cstdlib>
#include <fstream>
Ошибка еще там, я проверил wincrypt.h
Чтобы убедиться CryptUnprotectData
определяется, и это:
WINIMPM WINBOOL WINAPI CryptUnprotectData(DATA_BLOB *pDataIn,LPWSTR *ppszDataDescr,DATA_BLOB *pOptionalEntropy,PVOID pvReserved,CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,DWORD dwFlags,DATA_BLOB *pDataOut);
Я пытался весь день … у кого-нибудь есть подсказка?
Большое спасибо !
Ключ в том, что crypt32
библиотека не построена с mingw, поэтому вы получаете ошибки компоновки.
Плохая новость в том, что не существует простого способа решить эту проблему. Вы можете прочитать о некоторых способах решения здесь:
В MingW отсутствуют некоторые функции из Win32 Crypto API
Обсуждение этого вопроса на форуме Qt можно найти здесь:
https://forum.qt.io/topic/25527/cannot-find-how-to-link-to-crypt32-dll