PBox 基于 Dll 动态库窗体的模块化开发平台 (已开源)
一、由来:
1、每次开发一个新项目,都需要编写主界面,又要考虑各个子模块。重复造轮子。
2、写代码也好些年了。自己也写了很多小工具。分布在各个地方。需要使用的时候,到处找。十分不方便。
想着能不能将这些小工具都统一放在一起,变成一个个 Dll,在主窗体中调用这些由 EXE 修改而来的 Dll。
将这些 EXE 源代码工程修改为 Dll 工程时,尽可能的少修改,或不修改源代码(包括 Delphi、VC、QT)。
二、开发步骤(包括 Delphi 、VC、QT):
Delphi:
1、原有的 EXE 工程:修改为 Dll 工程,并添加输出函数(见2、标准的 DLL 工程);
2、标准的 DLL 工程:
输出一个函数:
procedure db_ShowDllForm_Plugins(var frm: TFormClass; var strParentModuleName, strSubModuleName: PAnsiChar); stdcall;
参数说明:
frm :Delphi 专用。 Delphi 中 DLL 主窗体类名;VC 置空;strParentModuleName :父模块名称;strSubModuleName :子模块名称;
即你的这个 Dll 模块是干什么的。例如人员管理--->考勤管理,这里人员管理就是父模块名称,考勤管理就是子模块名称。
示例:Module\SysSPath
procedure db_ShowDllForm_Plugins(var frm: TFormClass; var strParentModuleName, strModuleName: PAnsiChar); stdcall;
beginfrm := TfrmSysSearch;strParentModuleName := '系统管理';strModuleName := '系统搜索路径';Application.Handle := GetMainFormApplication.Handle;Application.Icon.Handle := GetMainFormApplication.Icon.Handle;
end;
5行代码就可以了。原有的源代码不用做任何修改。
VC2017/VC2019/QT:
#include <windows.h>HINSTANCE hinst = NULL;BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:hinst = (HINSTANCE)hModule;case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}enum TVCDllType {vtDialog, vtMFC};extern int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nCmdShow);extern "C" __declspec(dllexport) void db_ShowDllForm_Plugins(TVCDllType* spFileType, char** strParentName, char** strSubModuleName, char** strClassName, char** strWindowName, const bool show = false)
{* spFileType = vtDialog; // TVCDllType* strParentName = "文件管理"; // 父模块名称* strSubModuleName = "Notepad2"; // 子模块名称* strClassName = "Notepad2U"; // 窗体类名* strWindowName = "Notepad2"; // 窗体名if (show) {WinMain(hinst, 0, (LPSTR)"", (int)show);}
}
( const bool show,第一次调用 VC 的此函数时,需要获取到前面的参数,并不需要创建窗体)
( WinMain函数是你原有 VC EXE 的入口)
VC 原工程保持不变,编译得到 EXE。 新建类似上面的 .CPP 文件,编译,和原来的编译 EXE 产生的 OBJ 文件,进行连接,得到 DLL 文件,放置到 plugins 目录下就可以了。
示例1:DOC\VC\Dialog\7zip
示例2:DOC\VC\Dialog\Notepad2
三:特色功能
界面支持,菜单方式显示、按钮(对话框)方式显示、列表视方式显示。
PBox 还支持将一个 EXE 显示在窗体中。x86可以执行x64 EXE, X64 可以执行X86 EXE.妙哉妙哉!
四、未来打算:
1、加入远程控制功能;
2、加入数据库功能;
3、加入聊天功能;
五:更新日志:
2019-04-30:添加 VC 窗体 Dll (示例:文件管理--->Notepad2<https://github.com/XhmikosR/notepad2-mod.git>)。
2019-05-24:添加 VC 窗体 Dll (示例:文件管理--->7-Zip <https://www.7-zip.org/download.html>)。
六、开源地址:
https://github.com/dbyoung720/PBox
七:效果图:
---------------------------------------------------------------------------------------------------------------------------------
开发语言:
Delphi10.3 + WIN10X64
开发作者:
dbyoung@sina.com
QQ群:101611228
开发时间:
2018-06-01
PBox 基于 Dll 动态库窗体的模块化开发平台 (已开源)相关推荐
- C++中.lib静态库、.dll动态库的生成及调用2
关于动.静态库的介绍及静态库的生成及调用参见:C++中.lib静态库..dll动态库的生成及调用<1>,本文主要介绍基于VS2015平台的动态库dll的生成及调用方法. 一.动态库的生成 ...
- 易语言 标准c 动态库,易语言Dll动态库的开发
一.关于易语言DLL 易语言Dll动态库的开发是编程当中和其他语言开发进行交互必不可少的方法之一,从易语言3.6版开始,已经能够支持对DLL动态链接库的开发, 编译出的DLL是标准的DLL,和其他编程 ...
- .NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper
.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 參考演示样例代码,例如以下所看到的: /// <summary>/// MySql 数 ...
- C++中.lib静态库、.dll动态库的生成及调用1
一.前言 1.动态链接库(dll)与静态链接库(lib): 动态链接库(dll)是一个可以被其他应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源.在链接步骤中,连接器将从库文件取得所需的代 ...
- c语言dll注入器,Module Injector-Module Injector(DLL动态库注入器)下载 v1.0--pc6下载站
ModuleInjector是一款强大的DLL动态库注入器,可以注入到64位进程内,并且注入方式多种多样,可以在进程列表内右键来停止进程或查看进程内模块,在模块列表内可以隐藏模块!. 相关软件软件大小 ...
- Python: TensorFlow2.4与CUDA11.1缺失 ‘cusolver64_10.dll‘动态库
Python: TensorFlow2.4与CUDA11.1缺失 'cusolver64_10.dll'动态库 错误提示: Could not load dynamic library 'cusolv ...
- VS2019:C++程序lib静态库、dll动态库的生成和使用
一.静态库 静态库的使用需要(1).h头文件:(2).lib静态库文件: 1.静态库生成 (1)项目-右键属性-常规-配置类型-选静态库: (2)点击生成,Debug文件夹下出现lib静态库: 2.静 ...
- Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法
Windows下查看exe可执行程序或dll动态库所依赖dll动态库的方法 如需转载请标明出处:http://blog.csdn.net/itas109 技术交流:129518033 文章目录 Win ...
- delphi 用MDAC微软数据库访问组件的dll动态库
delphi 用MDAC微软数据库访问组件的dll动态库 一.概念 MDAC(Microsoft Data Access Components)是微软数据库访问组件,Netpise和许多利用数据库的软 ...
最新文章
- 从“诺奖级”成果到“非主观造假”,时隔6年,韩春雨带着原一作,再发高分文章!...
- Office365从销售说起——企业办公考虑重点
- suprahex画进化树_安装使用pyclone进行克隆演化推断
- JVM - G1初探
- VTK修炼之道42:频域处理_高通滤波(理想+巴特沃兹)
- Nginx的405 not allowed错误解决
- zoj 3747 (DP)(连续至多,连续至少)
- SQLServer中批量插入数据方式的性能对比 (转)
- js数字最多保留两位小数_8085微处理器中最多两个8位数字
- 16 --删除排序数组中的重复项
- typename与class
- Mac实时远程抓Ubuntu的网络包
- 算数,关系,逻辑运算
- 若依RuoYi-Vue 入门零接触超详细(一)
- docker服务假死解决方案
- 计算机考研公共课考英语几,新文道教育:2022考研必须要了解的30个知识点
- EDA之立创EDA专业版使用(原理图绘制)
- Python-冒泡排序函数
- Serverless 开发前端初尝试
- 千锋逆战班学习第二十三天 集合练习(一)
热门文章
- 分享88个搜索链接PHP源码,总有一款适合你
- PHP7.2源码安装
- 计算机课程成绩折算成百分制,百分制的分数怎么折算为GPA成绩
- 2019年苹果iOS App上架详细图文教程
- 算法练习——在有序序列(r1,r2,...,rn)中,存在序号i(1<=i<=n),使得ri=i。请设计一个分治算法找到这个元素。 要求算法在最坏情况下的时间性能为O(logn))
- 一起学习 “PS”(1、移动工具)
- RHEL7OSP-6.0的Linux底层管理
- 大数据_07 【hadoop HDFS的shell命令操作】
- Python系列 之 email模块 - 发送邮件
- Caused by java lang ClassNotFoundException org aspectj wea