对"_imp__CryptUnprotectData@28"的未定义引用,包括 Crypt32.Lib && wincrypt.h

undefined reference to `_imp__CryptUnprotectData@28' with Crypt32.Lib && wincrypt.h included

本文关键字:Lib Crypt32 包括 wincrypt 引用 CryptUnprotectData@28 imp 未定义      更新时间:2023-10-16

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

当我尝试编译时,这行简单的代码给了我一些错误:

CryptUnprotectData(data.password, NULL, NULL, NULL, NULL, (DWORD) 0, data.uncryptedPassword);

(with DATA_BLOB* data.)DATA_BLOB* data。uncryptedPassword)

get me:

undefined reference to `_imp__CryptUnprotectData@28'

如标题所述,我包括了Crypt32。Lib文件在my .pro:

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构建的,这就是为什么你得到链接错误。

坏消息是没有简单的方法来解决这个问题。你可以在这里阅读一些解决方法:

Win32 Crypto API中缺少一些函数

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

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