PBox 基于 Dll 动态库窗体的模块化开发平台 (已开源)

编程入门 行业动态 更新时间:2024-10-24 04:38:25

PBox 基于 Dll 动态库<a href=https://www.elefans.com/category/jswz/34/1765694.html style=窗体的模块化开发平台 (已开源)"/>

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 动态库窗体的模块化开发平台 (已开源)

本文发布于:2024-03-23 17:01:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740631.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:窗体   开源   动态   平台   PBox

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!