gpt4 book ai didi

c++ - 将非托管 "QT"dll 导入 C# 给出 dllNotFoundException 但存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:39 27 4
gpt4 key购买 nike

我正在尝试将一个 dll 导入到 C# 控制台应用程序,只是为了看看我是否可以让一个 dll 正常工作,当尝试这个并使用 C 代码导出函数时,一切正常,函数可以导入我的 C# 应用程序。

当我尝试向我的非托管 dll 中的某些 QT 方法添加某种链接时,问题就开始了。我正在使用 DllImport 从 dll 导入函数。

[DllImport("cDLL.dll", EntryPoint = "_Add@16")]
static extern double Add(double a, double b);

1 - 这是非托管 dll(不要看代码的功能,这只是为了测试目的)正常工作时的样子。

main.cpp 工作

#include <stdexcept>
#include "Windows.h"

using namespace std;

extern "C" __declspec(dllexport) double __stdcall Add(double a, double b)
{
return a + b;
}
extern "C" __declspec(dllexport) const char* getText()
{
return "hello world";//returnBufferString.c_str();
}
BOOL __stdcall DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) {
return TRUE;
}

2 - 当我尝试使用一些 QT 代码添加帮助函数时,只是一个普通的 QString DllImport 开始抛出 dllNotFoundException.dumpbin.exe 在包含 qt 代码之后显示所有导出的函数......

main.cpp dllNotFoundException

#include <QString>
using namespace std;
class testa
{
public:
static char* test()
{
QString a = "hejsan";
return qString2Char(a);
}
static char* qString2Char(QString a)
{
return a.toUtf8().data();
}
};

这是从 getText() 函数调用的,如下所示:

string returnBufferString;
extern "C" __declspec(dllexport) const char* getText()
{
returnBufferString = testa::test();
return returnBufferString.c_str();
}

当我尝试从 DllImport 访问 dll 时,我在第二部分得到了 dllNotFoundException。我该如何解决这个问题?我错过了任何依赖项或任何东西吗?我的 dll 是使用 msvc2010 编译器构建的,.pro 文件如下所示:

cDLL.pro

TEMPLATE = lib
CONFIG += dll

QT += core

# Input
SOURCES += main.cpp

我卡住了...

最佳答案

它不会告诉您它找不到的确切什么 DLL。这几乎肯定不是您的 DLL,它是QT 需要的DLL 之一。您还必须将它们复制到 EXE 文件夹中。如果您不知道并且无法在诺基亚文档中找到它,那么您可以使用 SysInternals 的 ProcMon 实用程序找到它。

但是,在这种情况下,您肯定希望将 QT 链接到您的 DLL 中,因为可以共享这些 DLL 的可能性很小。使用这个 SO question获取有关设置 QT 项目的指导。

关于c++ - 将非托管 "QT"dll 导入 C# 给出 dllNotFoundException 但存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11760819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com