我正在尝试将 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 时,我在 2:nd 部分得到 dllNotFoundException 。我该如何解决这个问题?我错过了任何依赖或任何东西。我的 dll 是使用 msvc2010 编译器构建的,.pro 文件如下所示:
cDLL.pro
TEMPLATE = lib
CONFIG += dll
QT += core
# Input
SOURCES += main.cpp
我被困住了...