# 浏览器调用本地DLL的助手程序DEMO
**Repository Path**: dev_gitee/CallDll
## Basic Information
- **Project Name**: 浏览器调用本地DLL的助手程序DEMO
- **Description**: 在电脑上安装此助手程序,此程序内置了一个HTTP服务器,浏览器通过HTTP请求调用助手程序,助手程序再调用本地DLL,并把调用结果反馈给浏览器。详情请参考https://blog.csdn.net/dengxiaodai/article/details/128770811和https://blog.csdn.net/dengxiaodai/article/details/128735706
- **Primary Language**: C++
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-01-12
- **Last Updated**: 2025-01-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
要在浏览器中调用本地DLL,常见的方法是使用插件。但是为了安全,现在有的浏览器对插件开发做了限制,不让插件调用外部DLL。比如说Chrome,为了调用外部的DLL,我们只能使用早期的chrome版本。
还有一种方法就是在电脑上安装一个助手程序,助手程序内置了一个HTTP服务器,浏览器通过HTTP请求调用助手程序,助手程序再调用本地DLL,并把调用结果反馈到浏览器中。我们这个程序就是使用这种方法。
详情请参考https://blog.csdn.net/dengxiaodai/article/details/128770811和https://blog.csdn.net/dengxiaodai/article/details/128735706
# 开发环境
- Microsoft Visual Studio Community 2022 (64 位) ,安装的时候要选择“使用C\+\+的桌面开发”,因为要使用MFC,所以还要选择“适用于最新v143生成工具的C\+\+ MFC (x86和x64)”以及“Visual Studio 扩展开发”
# 目录结构
浏览器调用本地DLL的助手程序DEMO
~~~
├── DllExample -- 本地DLL的例子,由助手程序调用
├── oatpp -- 轻量级高性能Web服务开发框架OAT++的头文件
├── oatpplib -- OAT++的库文件,总共四个版本,用于x64、x86的debug和release版本
└── res -- VC++的资源文件
~~~
# 主要功能
- 内置轻量级高性能Web服务开发框架OAT++
- 接收HTTP请求,调用本地DLL,并返回DLL调用结果
- 系统托盘区图标
- 设置开机启动、取消开机启动
- log日志
# 二开注意事项
- 在oatpp.cpp文件中修改web服务器的端口:
~~~
auto connectionProvider = oatpp::network::tcp::server::ConnectionProvider::createShared({ "localhost", 8080, oatpp::network::Address::IP_4 });
~~~
原来使用的端口是8080,可以修改成其他端口
- 在oatpp.cpp文件中添加HTTP调用路径,源代码的例子如下:
~~~
/* Route requests to Handler */
router->route("GET", "/", std::make_shared());
router->route("GET", "/myparam/*", std::make_shared());
router->route("POST", "/mypost", std::make_shared());
~~~
代码中HandlerGetIndex、HandlerGetMyparam、HandlerPost这三个类负责处理HTTP请求,三个类的代码也在oatpp.cpp文件中
- 在work.cpp文件中调用本地DLL
~~~
//这是DLL函数原型,根据您的实际情况修改
typedef int(__stdcall* MYPROC)(const char*, char*);
MYPROC ProcFunc;
//在这里加载DLL,根据您的实际情况,修改DLL的文件名和函数名,或者添加新函数
TCHAR dllFileName[] = _T("DllExample.dll");//DLL的文件名
char dllFuncName[] = "GetCertEx";//DLL的函数名
void initDll(){
......
~~~
work.cpp文件中的函数CallDllGetCertEx负责调用DLL中的GetCertEx函数,如果DLL中有多个函数,我们也需要多写几个类似CallDllGetCertEx的函数