我的一个项目有问题。
我在MinGW和Qt 5.4.0中使用QtCreator

当我尝试编译时,此简单行会给我一些错误:

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'


如标题所述,我在.pro中包含了Crypt32.Lib文件:

QT       += core gui
QT       += sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = ChromePass

LIBS += -L$$PWD/ -lCrypt32

TEMPLATE = app


SOURCES += 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 missing some functions from the Win32 Crypto API

在Qt论坛上有关此问题的讨论可以在这里找到:

https://forum.qt.io/topic/25527/cannot-find-how-to-link-to-crypt32-dll

关于c++ - 未定义对_imp__CryptUnprotectData @ 28的引用,其中包括Crypt32.Lib && wincrypt.h,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30624701/

10-09 05:23