将非托管"QT" dll 导入 C# 给出 dllNotFoundException 但存在
Import unmanaged "QT" dll to C# give dllNotFoundException but exists
我正试图将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代码的帮助函数时,DllImport只需一个普通的QString就开始抛出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时,我在2:nd部分中得到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问题来指导您设置QT项目。
您需要将DLL与可执行文件放在同一文件夹中。
请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx
- C++程序在循环后给出奇怪的int值
- 为什么tellp()给出-1
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- muQueue.front() 给出了 const 实例,即使我没有将其标记为 const
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 检查是否以特定精度给出双精度
- 遍历顺序由 std::文件系统directory_iterator给出
- 使用 boost 进行标记化会给出相同的输出
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 为什么代码给出分段错误?
- 将常量字符串添加到非常量字符串是否会给出常量字符串
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 特征 LLT 模块给出不正确的结果?
- 使用 memcpy() 复制到 std::chrono::milliseconds 会给出错误 -Werror=clas
- 尝试创建表会给出 SQL 逻辑错误
- 使用 find 解析文件会给出不同文件的奇怪结果
- 当字符串是某个单词时给出输出?
- C++如何在多次执行后记住过去给出的输入