1.mainWindow.h声明
//这个声明主要用于调用dllManager的 runFunc函数
typedef bool *(*func)(QString,QString,void *,void *,void *);
//这个结构体用于接收函数的值
struct ValTrans
{
void *ptr;
};
2.调用dllmanager runFunc
dllName = "treeDll.dll";
funcName = "showTree";
QWidget *tree = new QWidget(dock[0]);
//setWidget调用dllmanager函数
tree = setWidget(dllName,funcName);
//将tree 添加到主界面中
dock[0]->setWidget(tree);
addDockWidget(Qt::LeftDockWidgetArea,dock[0]);
setWidget函数
QWidget* MainWindow::setWidget(QString dllName,QString funcName)
{
func open = (func)QLibrary::resolve("dllManager.dll","runFunc");
if(open){
ValTrans valT;
bool ok = open(dllName,funcName, this, &valT, 0);
if(ok){
QWidget *form = (QWidget *)valT.ptr;
return form;
}
}
else
{
QMessageBox::information(0, "open case", "can not open");
}
return 0;
}
至此,调用dllManager函数基本完成.将Dll中的tree添加到了主界面中
(后期会进行优化.)
各部分封装dll 调用基本如此。
主界面