私はdllについて学んでいます。私はQtでそれを試しました。まず、dll関連のファイルを投稿しています。Qt - Dll関連の問題
第1DLL - プロファイル
TEMPLATE = lib
SOURCES += \
check.cpp
HEADERS += \
check.h
これ一つであるDLL-ヘッダファイル "check.h"
#ifndef CHECK_H
#define CHECK_H
#include <iostream>
extern "C++" __declspec(dllexport) std::string check();
#endif // CHECK_H
この1つはDLLである - ソースファイル "check.cpp"
#include <iostream>
#include "check.h"
extern "C++" __declspec(dllexport) std::string check()
{
return "dll applied";
}
上記のプロジェクトファイルをコンパイルし、dllを取得しました。 DLLの名前は "dll.dll"
今すぐメインファイルが来ます。ここでは、DLLを使って "check"関数にアクセスしようとしました。
#include "check.h"
#include <iostream>
#include "MyMessageBox.h"
#include <QApplication>
#include <QLibrary>
#include <QMessageBox>
typedef std::string (*CheckType) (void);
class MyMessageBox:public QMessageBox
{
public:
MyMessageBox(std::string message,QWidget*parent=0):
QMessageBox(QMessageBox::NoIcon,QString("ErrorMessage"),QString(message.c_str()),QMessageBox::Ok,parent,Qt::Widget)
{
}
};
int main(int argc,char * argv[])
{
QApplication app(argc,argv);
CheckType myCheck;
QLibrary myLib("dll");
myLib.load();
bool ok = myLib.load();
if(ok)
{
MyMessageBox mm("Load is done");
mm.exec();
}
ok = myLib.isLoaded();
if(ok)
{
MyMessageBox mm("Loaded");
mm.exec();
}
myCheck = (CheckType) (myLib.resolve("check"));
if(!myCheck)
{
MyMessageBox m0("Resolving isn't happened");
m0.exec();
}
std::string result = myCheck();
MyMessageBox mm(result);
mm.exec();
return app.exec();
}
しかし、私が上記のアプリケーションを実行したとき、私は「解決は起こっていません」を得ました。つまり、関数ポインタはNULLになりました。どの部分が間違っているのか分かりません。誰か助けてくれませんか?
"main"ファイルでコンパイルすると、 "check.h"に__declspec(dllexport)を入れなければならないと言っていますか? – prabhakaran
@prabhakaran:私はあなたの実際のコードでDLLの魔法を使う必要があることを明確にしました。 – rubenvb
このエラーが「無効または破損したファイル:0x2C0で読み取れません」 – prabhakaran