开发com组件可以用c++,vc++,net,我比较熟悉net,演示用dnet
(1).创建项目:启动vs2017,新建项目,选择Visual C# ->Windows桌面->类库通用windows
(2). 修改Com项目:点击 项目->项目属性,再点击应用程序->程序集信息,勾选使程序集COM可见,并保存
(3).创建强命名签名文件:使用vs2017的开发人员命令提示符,执行以下命令,将签名文件生成到D盘根目录(建议以管理员身份运行):
sn -k D:\ThinkShop.snk
(4).使用签名文件:点击 项目->项目属性,再点签名->勾选为程序签名->选择在D盘创建的签名文件
(5).编写代码:编写玩组件方法,编译生成dll文件
namespace ThinkShop { public class App { //校验客户软件是否正版 private bool isAuthorize() { string ip = "127.0.0.1"; if (ip != "127.0.0.1") { return false; } else { return true; } } //获取网站标题设置 public string GetWebsiteTitle() { bool isAuthorize = this.isAuthorize(); if (isAuthorize) { return "This is website title!"; } else { return "Please support authentic edition!"; } } } }
(6.)dll类库转com组件:将dll转为com组件,使用vs2017的开发人员命令提示符以管理员方式运行,执行以下命令(要在dll目录下,)
regasm ThinkShop.dll
(7).将程序集添加到全局程序集缓存中:可以直接在第6步骤直接执行,加到这里方便阅读。执行以下命令
gacutil /I ThinkShop.dll
(8).php调用com组件:(记得开启php.ini中的extension=php_com_dotnet.dll)
<?php $thinkShop=new Com("ThinkShop.App"); $title = $thinkShop->GetWebsiteTitle(); var_dump($title); ?>
php源码保护:
可以将核心操作用com组件实现,然后加密dll,注册到程序集,再删除dll文件。
vs2019种需要标准的接口实现来写com,参考我的gitee项目代码,很快入手,上面的是基于vs2017的代码
先看看下面的代码:<?php session_start(); $_SESSION['username']='lucy'; ?>当我们请求访问上面的脚本,默认会在我们的客户端生成一个名为PHPSESSID的cookie,我这里的值是PHPSESSID=...
通过经纬度转换为城市名称,并获得城市的编号,通常在全国类型的商城中比较通用。//经纬度转城市名称(返回城市id,城市名称) //$ak开发密钥,$lat纬度,$lng经度,$type返回数据类型 public function getCityName($ak,$lat,$lng)...
首先看看以下代码:代码1:<?php $a=0.1; $b=0.7; if($a+$b==0.8) { echo "1"; } else{ echo "2"; } ?>代码2:<?php &n...
上篇文章已经讲解arrayacces的原理,现在来讲解下arrayaccess的实际应用。一个大型的互联网项目中必然会存在各种配置信息,例如多种数据库信息:mysql,tidb,mongodb,redis,某个业务模块单独的配置信息如比例,额度等等,那么该如何治理配置信息?PHP项目中大部分的框架都...
使用openssl扩展对应替换mcrypt的函数,(比较麻烦,但是openssl是未来趋势)在新版php中编译mcrypt扩展使用一个纯php代码实现的mcrypt扩展库,git地址为https://github.com/phpseclib/mcrypt_compat,每个mcrypt的方法都已经实...
当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。第一种:使用phpv8js扩展执行js代码。(pecl...