本着尽量少修改或不修改原有工程(EXE)源代码(Delphi、VC、QT)的原则;
支持 Delphi DLL 窗体、VC DLL 窗体(Dialog/MFC)、QT DLL 窗体;
Delphi11.3、WIN10X64 下开发;
WIN10X64下测试通过;支持X86、X64;
邮箱:[email protected];
QQ群:101611228;
- Delphi 原 EXE 工程文件,修改为 DLL 工程。输出导出函数就可以了,原有代码不用作任何修改;
- 把编译后的 DLL 文件放置到 plugins 目录下就可以了;
- 示例:modules\curlUI;
- 示例:modules\sPath;
- 示例:modules\pm;
- Delphi 函数声明:
procedure db_ShowDllForm_Plugins(var frm: TFormClass; var strParentModuleName, strSubModuleName: PAnsiChar); stdcall;
- 将 VC 窗体 EXE 转换成 DLL,供其它语言调用: [https://blog.csdn.net/dbyoung/article/details/103987103]
- VC 原 EXE,基于对话框,不作任何修改。新建 Dll.cpp 文件,输出导出函数就可以了;
- VC 原 EXE,基于 MFC,需要少许修改;
- 把编译后的 DLL 文件放置到 plugins 目录下就可以了;
- 示例(基于对话框):modules\7-zip;
- 示例(基于对话框):modules\Notepad2;
- 示例(基于 MFC):modules\mpc-be;
- VC2022 函数声明:
enum TLangStyle {lsDelphiDll, lsVCDLGDll, lsVCMFCDll, lsQTDll, lsEXE};
extern "C" __declspec(dllexport) void db_ShowDllForm_Plugins(TLangStyle* lsFileType, char** strParentName, char** strSubModuleName, char** strClassName, char** strWindowName, const bool show = false)
- QT 原 EXE,不作任何修改。编译,得到 LIB、RES、OBJ 文件。
- 新建 Dll.cpp 文件,输出导出函数就可以了;编译、连接得到 DLL 文件;
- 把编译后的 DLL 文件放置到 plugins 目录下就可以了;
- 其实和 VC Dialog DLL 方式一模一样,封装和调用;
- 示例:modules\cmake-gui;
- 示例:modules\qBittorrent;
- 函数声明:
enum TLangStyle {lsDelphiDll, lsVCDLGDll, lsVCMFCDll, lsQTDll, lsEXE};
extern "C" __declspec(dllexport) void db_ShowDllForm_Plugins(TLangStyle* lsFileType, char** strParentName, char** strSubModuleName, char** strClassName, char** strWindowName, const bool show = false)
- Delphi :
procedure db_ShowDllForm_Plugins(var frm: TFormClass; var strParentModuleName, strSubModuleName: PAnsiChar); stdcall;
frm :Delphi 中 DLL 主窗体类名;
strParentModuleName :父模块名称;
strSubModuleName :子模块名称;
- VC2022/QT :
extern "C" __declspec(dllexport) void db_ShowDllForm_Plugins(TLangStyle* lsFileType, char** strParentName, char** strSubModuleName, char** strClassName, char** strWindowName, const bool show = false)
lsFileType :是基于 Dialog(对话框) 的 DLL 窗体,还是基于 MFC 的 DLL 窗体,还是基于 QT 的 DLL 窗体;
strParentName :父模块名称;
strSubModuleName :子模块名称;
strClassName :DLL 主窗体的类名;
strWindowName :DLL 主窗体的标题名;
show :显示/隐藏窗体;
界面支持,菜单方式显示、按钮(对话框)方式显示、列表视方式显示;
支持将一个 EXE 窗体程序显示在我们的窗体中;
支持窗体类名动态变化的 EXE、DLL 窗体 程序;支持多文档窗体;
支持文件拖放至 EXE、DLL 窗体;
支持 x86 EXE 调用 x64 EXE,x64 EXE 调用 x86 EXE;
1、文件拖放只能拖放到主窗体上,不能直接拖放到子模块 DLL 窗口中;这是由于权限造成的问题(资源管理器是普通权限、而 PBox 是管理员权限);
添加数据库支持(由于本人对数据库不熟悉,所以开发较慢,又是业余时间开发);
1、如果运行 PBox(x64) 下面的 JavaCV、dbVideo 模块,需要先解压 "Win64\plugins\SDK\OpenCV\4.6.0\bin\CUDA.7z" 到当前目录; 2、OpenCV(x64) 是基于 CUDA SDK 编译的。如果你的机器上没有 NVIDIA 显卡,是无法运行 JavaCV、dbVideo x64 模块的; 3、因为初始化Java VM,在 Delphi IDE 中,会报异常:c0000005 ACCESS_VIOLATION,选择 "Ignore this exception type",下次就不会提示了;