开发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的代码
在项目中需要对图片进行裁剪,前端裁剪完成发送base64给后端,但是很意外的PHP获取到的数据和前端有点差距,之前我都是先加密,后端解密,但是这次依然不行。于是使用filter_input方法轻松解决。$base64 = filter_input(INPUT_POST...
项目需要使用websocket推送最新订单,客户服务器非linux不支持swoole,因此使用原生,直接上代码(1).PHP服务端<?php ini_set('error_reporting', E_ALL ^ E_NOTICE); ini_set...
001源码:/* * $xml_str是xml字符串 */ function xmltoarray($xml_str) { //禁止XML实体扩展攻击 libxml_disable_entity_loader(true); //拒绝包含...
php官方已经提供了Iterator(迭代器)接口,通过网上资料的学习,目前看适合超大集合或者数组提取使用。学习一个函数的实现对比内存占用差距.使用迭代器和普通循环实现range()函数。(1).普通循环实现range()函数。function newrange($low, $h...
Redis提供了发布订阅功能,可以用于消息的传输,Redis的发布订阅机制包括三个部分,发布者(publisher),订阅者(subscriber)和频道(channel)。 发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个...
(1).config.php 配置文件<?php /** * RabbitMQ_Config */ $config = [ 'host' => ...