1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
dll编程

COM为中间件调用DLL的说明在《PHP调用COM组件的说明》里,已介绍了PHP调用COM组件的方法。如果能用COM调用DLL,再用PHP调用COM,就可以实现PHP对DLL的调用。即以COM作为中间件,让PHP可以调用现成的DLL,可以很大程度上地减少PHP开发的工作量。下面将对COM调用DLL的方法进行说明。采用的是2005环境下的C#语言。1.建立DLL建立类库生成DLL的方法不再说明。需要注意的是如果COM组件具有强命名,一定要也赋予类库强命名,才可以被COM调用;如果COM不具强命名,类库也无需强命名。强命名方法如下:在“开始—VS2005 —VS Tools—VS命令提示符”,输入:sn -k ****_Key.snk将****_Key.snk添加入项目中(在Program Files\MS Visual Studio 2005\VC下),然后打开AssemblyInfo.cs,并加入下面一行的内容:[assembly: AssemblyKeyFile(****_Key.snk)]下面为代码示例:using System;usingSystem.Collections.Generic;usingSystem.Text;namespacePHPInvokeClassLibrary{public class PhpClass{public string Php_func(string a,string b){string c = a + b;return c;}}}2.在COM中调用DLL在COM中类的所有方法都要在类接口中先定义。所以我们要先在类接口中定义一个方法,并赋予其Dispid值,然后在继承的类中实现这个方法,在方法中我们就可以调用我们想要的DLL。COM代码示例如下:using System;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingSystem.Reflection;usingSystem.Data.OleDb;usingSystem.Data;usingSystem.Collections;usingSystem.Collections.Specialized;usingPHPInvokeClassLibrary;namespaceComtest{//类接口[Guid(394BE3FE-18B8-4c5e-B611-75B5C5493A4E)]public interface ITest{[DispId(1)] string Test(string test);[DispId(2)] //固定写法,索引号从1开始string About();[DispId(3)]int Add(int a, int b);//该方法用于调用DLL[DispId(4)]stringPhpFunc();}//事件接口[Guid(45875EE5-5C8D-4016-897A-FCC7DD5A6834), //固定写法InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]public interface ITest_Events{}//类[Guid(854C2016-E7BF-41ea-8F09-B873698E9F8E), //固定写法ClassInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(ITest_Events))]public class Class2 : ITest //该类继承上面的接口,并实现抽象方法{public string Test(string test){return test;}public string About() { return 欢迎访问 ; }publicint Add(int a, int b) { return a + b; }//该方法实现了类接口Dispid(4)的方法,调用了DLLpublic string PhpFunc(){PhpClass a = new PhpClass();string b = a.Php_func(Ha,what?);return b;}}}3.PHP调用COM那么只要在PHP中使用COM类就可以成功调用DLL中我们想要的方法了!代码如下:?php//dl(comtest.dll);//w32api_register_function(, FuncDll, int); $b=new COM(Comtest.Class2);$t1=126;$t2=456; $r=$b-add($t1,$t

文档评论(0)

shenlan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档