# 浏览器调用本地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/128770811https://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的函数