我想導入一個DLL到一個C#控制檯應用程序只是爲了看看我能否得到一個DLL作爲一個想要工作,當試圖這個和導出與C函數代碼一切工作正常,功能可以導入我的C#應用程序。導入非託管的「QT」DLL到C#給dllNotFoundException但存在
當我嘗試在我的非託管dll中爲某些QT方法添加某種鏈接時,問題就開始了。我正在使用DllImport從dll導入函數。
[DllImport("cDLL.dll", EntryPoint = "[email protected]")]
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獲得dllNotFoundException。我該如何解決這個問題?我錯過了任何依賴或任何東西。我的DLL是建立使用msvc2010編譯器和.pro文件看起來是這樣的:
cDLL.pro
TEMPLATE = lib
CONFIG += dll
QT += core
# Input
SOURCES += main.cpp
我卡住了...
就像我很愚蠢,謝謝澄清! – 2012-08-03 12:38:46