Windows下动态加载dll库
2021/9/7 7:11:12
本文主要是介绍Windows下动态加载dll库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
库代码、
声明
class handle //接口类 { public: virtual void run() = 0; virtual void stop() = 0; virtual void pause() = 0; };
#pragma once #ifdef LIBDLL #define LIBDLL _declspec(dllexport) #else #define LIBDLL _declspec(dllexport) #endif #include "handle.h" class LIBDLL exporeDll:public handle { public: virtual void run(); virtual void stop(); virtual void pause(); };
实现
#include "pch.h" #include "exporeDll.h" #include <iostream> void exporeDll::run() { std::cout << "跑" << std::endl; } void exporeDll::stop() { std::cout << "停止" << std::endl; } void exporeDll::pause() { std::cout << "暂停" << std::endl; } extern "C" LIBDLL handle*getInstance() { return new exporeDll(); }
动态加载库文件
#include "../生成动态库/handle.h" #include <Windows.h> #include <QDebug> #include <QString> #include <QList> #include <QDir> #include <QFileInfo> class dllClass { public: dllClass(); ~dllClass(); bool loadModel(QString fliePath = nullptr); void start(); private: QList<HINSTANCE>m_hDll; QList<handle*>m_handle; };
using _hand = handle * (*)(); bool dllClass::loadModel(QString fliePath) { QDir dir; QStringList filter{ "*.dll" }; if (fliePath == nullptr) { //QDir dir(QDir::currentPath()); dir.setPath(QDir::currentPath()); } else { dir.setPath(fliePath); }// end of if dir.setNameFilters(filter); auto fileInfo = dir.entryInfoList(filter); //过滤dll文件 for (auto &name : fileInfo) { auto hDll = LoadLibraryA(((name.fileName().toStdString().c_str()))); if (NULL == hDll) { continue; }//end of if m_hDll.push_back(hDll); auto hand_ = (_hand)GetProcAddress(hDll, "getInstance"); if (NULL == hand_) { continue; }//end of if auto hadle__ = hand_(); //这里取出来的是一个对象 m_handle.push_back(hadle__); //遍历的类放入有List容器中 }//end of for return true; }
这篇关于Windows下动态加载dll库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-26大厂数据结构与算法教程:入门级详解
- 2024-12-26大厂算法与数据结构教程:新手入门指南
- 2024-12-26Python编程入门指南
- 2024-12-26数据结构高级教程:新手入门及初级提升指南
- 2024-12-26并查集入门教程:从零开始学会并查集
- 2024-12-26大厂数据结构与算法入门指南
- 2024-12-26大厂算法与数据结构入门教程
- 2024-12-26二叉树入门教程:轻松掌握基础概念与操作
- 2024-12-26初学者指南:轻松掌握链表
- 2024-12-26平衡树入门教程:轻松理解与应用