窗体的模块化开发平台 (已开源)"/>
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行代码就可以了。原有的源代码不用做任何修改。
VC2022/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<GitHub - XhmikosR/notepad2-mod: LOOKING FOR DEVELOPERS - Notepad2-mod, a Notepad2 fork, a fast and light-weight Notepad-like text editor with syntax highlighting>)。
2019-05-24:添加 VC 窗体 Dll (示例:文件管理--->7-Zip <Download>)。
六、开源地址:
GitHub - dbyoung720/PB: PB(PBox) is a modular development platform based on DLL Window
七:效果图:
---------------------------------------------------------------------------------------------------------------------------------
开发语言:
Delphi11.3 + WIN10X64
开发作者:
dbyoung@sina
QQ群:101611228
开发时间:
2018-06-01
更多推荐
PBox 基于 Dll 动态库窗体的模块化开发平台 (已开源)
发布评论