标签:php class 下载 数据接口 ons 属性 说明文档 接受 显示
最近做一个网站,需要频繁使用远程数据,数据接口已经做好。在做转换的时候遇到了性能上的问题:开始打算用php来实现转换,苦苦查了数天,都没有找到直接操作字节的方法。虽然可以使用 pack() 方法将各个数据压入结构中,但是在解压的时候却不能通过 unpack() 简单的解出来,需要通过
这类方法进行解码。频繁的使用各种字符串操作,无疑将对性能造成很大的影响。经过研究,发现有以下方法可以实现对字节的操作:
由于网上找不到相关的文档(其实是没好好找),stream和socket先后被PASS掉了。为了编译COM的dll,还专门下载了VC++ 6.0(为啥不装2005?硬盘太小,装不下,没办法啊)。经过无穷无尽的Google(全是php调用VB写的dll的信息,没多大帮助)和编译/调试,终于成功的把结果传递到php中。
下面简单介绍一下步骤和注意事项:
几点疑问
//////////////////////////////////////////////////////////////////////////
CODE:
CODE:
Public Function hello() As StringCODE:
$obj = new COM("test.dll");
今天要用工商银的接口做一个在线支付,提供的是两个dll文件和一个说明文档,另外还电子证书。
PHP调用COM组件,从网上找了半天也没找到个说得明白的,是不是用这个的人太少了又或是太简单所
以没有人写。
什么是COM?
COM(Component Object Model)组件对象模型,是一种跨应用和语言共享二进制代码的方法。是
位于DCE RPC上部的对象指向层(关联服务)定义公共的调用协定以允许用不同语言编写的代码调用,
并允许其它语言代码进行交互操作(前题是代码是COM明白的),COM可以作为DLL被本机程序载入也可
以通过DCOM被远程进程调用。
准备工作
比如我作了一个COM组件,新建一个VB6工程,ActiveX Dll将工程命名为P_test,类名为c_test ,类的文件内容如下:
Option Explicit
Private MyScriptingContext As ScriptingContext
Private MyApplication As Application
Private MyRequest As Request Private MyResponse As Response
Private MyServer As Server
Private MySession As Session Public
Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyApplication = MyScriptingContext.Application
Set MyRequest = MyScriptingContext.Request
Set MyResponse = MyScriptingContext.Response
Set MyServer = MyScriptingContext.Server
Set MySession = MyScriptingContext.Session
End Sub
Public Sub OnEndPage()
Set MyScriptingContext = Nothing
Set MyApplication = Nothing
Set MyRequest = Nothing
Set MyResponse = Nothing
Set MyServer = Nothing
Set MySession = Nothing
End Sub
Public Function Test_Number(num) As Variant
If num < 0 Then Get_Number_Attrib = -1
If num > 0 Then Get_Number_Attrib = 1
If num = 0 Then Get_Number_Attrib = 0
End Function
编译生成p_test.dll文件
第一步,做为一个COM组件,这个DLL要被系统识别就要先到系统来报到
regsvr32 [路径]/[组件文件名]
regsvr32 C:/WINDOWS/system32/p_test.dll
放在系统文件夹system32下不容易出现权限问题
这时候这个文件就不能移动位置了,系统会在用到它时到这个目录来找,如果改目录就得先删除注册
再重新注册
regsvr32 /u [路径]/[组件文件名]
系统会显示窗口表示成功,大意是 组件Dllregister成功或是Dllunregister成功
第二步就可以直接调用它了
<?
$b=new COM("p_test.c_test"); //一般前边是它的主文件名后边是它的类名从注册表里找这个文
件可以找到
这样就生成了一个叫b的对象,我们就可以用它的属性和方法来操作了
$a=$b->Test_Number(-454);
echo $a;
?>
可能遇到的问题是,编译工程时通不过,要将
Microsoft Active Server Pages Object Library
引用进来,具体实现"Project->References"找到改库,并勾上 。
标签:php class 下载 数据接口 ons 属性 说明文档 接受 显示
原文地址:http://www.cnblogs.com/caicaizi/p/6676190.html