PHP调用COM的实现(VC6) .
来源:互联网 发布:linux wifi 密码破解 编辑:程序博客网 时间:2024/06/05 19:35
PHP调用COM的实现(VC6)
2009-02-25 17:10 671人阅读 评论(0)收藏举报
项目中需要用DLL实现一些服务端的运算,故想到用COM来实现以下是在通过网上别人例子所做的总结:
- 在VC++ 6.0中,File -> New... 选择Projects中的"ATL COM AppWizard",填写工程名称等。本例中,工程名为"ATLtest"。
- 在"ATL COM AppWizard - Step 1 on 1"对话框中,"Server Type" 选择"Dynamic Link Library (DLL)",之后Finish。
- 在"ClassView"中,右击"ATLtest",选择"New ATL Object...",在"ATL Object Wizard"中,选择默认的"Simple Object",之后"Next"。
- 在"ATL Object Wizard 属性"中,在"Short Name"输入接口的名称。本例中,接口名称为"test"。之后,"Names"选项卡中的所有textBox都自动填好了默认的值。注意两个地方:一个"Prog ID"(本例中为"ATLtest.test"),一个"Interface"(本例中为"Itest")。
- 完成之后,在"ClassView"中,"ATLtest classes"下生成了"Ctest"类,并且实现了"Itest"接口。
- 右击"Itest"接口,选择"Add Method..."。
- 在"Add Method to Interface"中,填写方法的名称和参数。注意:返回值一定是HRESULT型,真正的返回值是最后一个参数。比如//C++ code
BSTR Encode(unsigned int msgType, unsigned int msgLength,[out, retval] BSTR message)
这个函数,要写成//C++ code
STDMETHODIMP Ctest::Encode(
unsigned int msgType,
unsigned int msgLength,
BSTR message,
BSTR *result
)
这样的形式。还有就是返回值只接受简单的类型(不知道为什么,char**不能用)和指针,BSTR没法直接使用。 - 完成这个函数。当然,为了简单起见,这里就是给结果随便赋了一个值,用来说明参数成功的传递出来了。没有考虑任何内存泄漏问题。//C++ code
STDMETHODIMP Ctest::Encode(
unsigned int msgType,
unsigned int msgLength,
BSTR message,
BSTR *result
)
{
BSTR temp = ::SysAllocString(L"asdfasdf");
*result = temp;
return S_OK;
} - 编译,将得到的ATLtest.dll使用regsvr32进行注册,注册命令:regsvr32 ****.dll 卸载命令:regsvr32 ****.dll /u/s
- 之后书写这样的php代码://php code
$com = new COM("ATLtest.test") or die("无法建立COM组件");
$result = "未处理的字符串";
echo '$result = "'.$result.'"<br />';
$result = $com->Encode(1,1,"11");
echo '$result = "'.$result.'"<br />';
$com = null; - 注意这里的"ATLtest.test"是刚才(4)中的"Prog ID",并且使用Encode() 的方法和声明的也不一样。没有关系!
当然,由于完全没有用到三个输入参数,这里的1,1,"11"只是为了满足输入参数的数量。 - 这个php的输出是什么样的呢?//HTML 结果
$result = "未处理的字符串"
$result = "asdfasdf";//我在这里试验没有成功,输出的是result="";但是函数确实已经执行,可能是由于php与ATL参数匹配的问题?我这里没有用到返回值,所以就先这样了,如果谁知道原因或解决办法,请不吝赐教啊
- PHP调用COM的实现(VC6) .
- PHP调用COM组件的说明
- PHP调用非COM的dll
- VC6创建COM组件,Qt调用例子
- PHP调用COM函数
- php的COM组件调用相关(包括com_event_sink的用法)
- delphi 编写的com 对象 用php调用的实例
- php调用DLL(COM)注意事项
- PHP windows 调用com组件
- 如何用PHP调用自己编写的COM组件?
- 关于IIS php调用com组件的权限问题
- PHP调用VC编写的COM组件实例
- php调用com组件加载dos命令解压缩的方法
- PHP调用VC编写的COM组件实例
- 【php】php通过COM类调用组件
- VC6.0 DLL调用与创建的例子(HOOK)
- php 不等待返回的实现方法(异步调用)
- php 不等待返回的实现方法(异步调用)
- 面向对象学习记录4
- 做网站出现的bug(一)
- calm down
- ActiveX组件与JavaScript交互
- 控制台美化
- PHP调用COM的实现(VC6) .
- 购物车的实现原理
- Java记忆(必背)【纯属个人总结】(一)
- 经过一周的挣扎,目前天气预报抓取解析插入数据库的功能已经大致实现,附项目源码
- k Nearest Neighbor Search by CUDA
- 这些你见过吧?
- Java记忆(必背)【纯属个人总结】(二)
- 头文件中的<>与""
- 一点,伤不起