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番目の部分でdllNotFoundExceptionが発生します。どうすればこれを解決できますか?依存関係などを見逃したことがありますか。私のdllはmsvc2010コンパイラを使用してビルドされており、.proファイルは次のようになります。
cDLL.pro
TEMPLATE = lib
CONFIG += dll
QT += core
# Input
SOURCES += main.cpp
私は立ち往生しています...