RT
PHP调用一个易语言写的DLL
求高手写个简单的DEMO
1. 下载dynwrap.dll
2. 把该文件放入system32和php/ext/下,修改php.ini,增加extension=dynwrap.dll
3. 注册dynwrap.dll:com:cmd regsvr32 d:/dynwrap.dll
4. 将要调用的dll放入system32
5. register参数,
<?php
$dw = new COM("DynamicWrapper");
$dw->Register("Dll1test.dll", "add", "f=s", "i=uu", "r=l");
$ch = $dw->add(11,22); //dll的add函数调用
echo '<br/>',$ch;
$dw->Register("Dll1test.dll", "subtract", "f=s", "i=uu", "r=l");
$ch2 = $dw->subtract(42,22); //dll的sub函数调用
echo '<br/>',$ch2;
exit;
?>
#define DLL1TEST_API extern "C" _declspec(dllexport)
DLL1TEST_API int add(int a,int b)
{
return a+b;
}
DLL1TEST_API int subtract(int a,int b)
{
return a-b;
}
由于前段时间闲着无聊没事做去捣鼓一个PHP的网络验证系统!想用AES来实现客户端和服务端的双向动态加密,客户端用易语
言编写,由于AES算法的填充方式和IV不同,所以不能达到互
解,于是想到了用E写个DLL给PHP调用!由于易写的DLL不是标
准的com,所以PHP调用需要用非com的调用方法!PHP需要用到
这个扩展组件:dynwrap.dll 首先放这个dll在system32目录下再注册这个组件到system 然后
在把这个dll放在exr目录下然后php配置文件需要加载这个dll
一下是PHP加载DLL的类
<?php
class AES{
private $dll;
private $path;
public function construct(){
$this->dll=new COM("DynamicWrapper");
$this->path=dirname(FILE__);//获取该脚本的绝对路径
}
public function EnAES_Path_($text,$key){
$this->dll->Register("AES.dll", "EnAES_Path", 'i=sss', "f=s", "r=l");
$file_num=$this->dll->EnAES_Path($text,$key,$this->path);
if($file_num!=0){
return $file_num;
}
}
public function DeAES_Path_($mi,$key){
$this->dll->Register("AES.dll", "DeAES_Path", 'i=sss', "f=s", "r=l");
$file_num=$this->dll->DeAES_Path($mi,$key,$this->path);
if($file_num!=0){
return $file_num;
}
}
public function Read_File($file_name){
$file_N="AES_".$file_name.".tmp";
$file_con="";
$file_con=@file_get_contents($file_N);
return $file_con;
}
public function Delete_File($file_name){
$file_N="AES_".$file_name.".tmp";
@unlink($file_N);
}
}
?>
可以直接调用rundll32.exe 然后把要执行的dll文件名作为参数跟在后面.
具体怎么调用可以百度一下.
直接用system调用然后调查这么返回结果.
或者使用popen建立管道调用.