PHP调用C#开发的dll类库方法


Posted in PHP onJuly 28, 2014

有的时候,我们需要在php中利用到其他语言编写的dll类库,如C#编写的dll,方法就是利用PHP new COM方法来调用,在调用之前先要把dll库注册并把程序集放入到全局缓存中。

1. 创建一个 C# Class Library ,命名为:HelloWorld
2. 打开项目的属性,在点选左边的 "Application"(就是第一个tab) , 然后点击Assembly Information 按钮 ,在弹出的Dialog中, 必须在底部勾上: Make assembly COM-visible !否则 , 这个dll将不能以COM方式访问 .(  也可以在代码中的类声明中写上[ComVisible(true)] , 效果一样,需要增加using System.Runtime.InteropServices;引用)

PHP调用C#开发的dll类库方法

3. 创建强命名签名文件并使用

使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示符,输入 sn -k d:\HelloWorld.snk 回车即创建了强命名签名文件

打开项目的属性,点选左边Signing 勾上Sign the assembly 在 Choose a strong name key file:处选择<Browse> 选择刚才创建的HelloWorld.snk文件

PHP调用C#开发的dll类库方法

4. 创建类库并编译成dll

namespace HelloWorld  

{  

    //[ComVisible(true)] //or check "Assembly COM-Visible" at Application-Assembly_Information dialog ;  

    public class Hello  

    {  

        public string Write()  

        {  

            return "Hello World";  

        }  

    }  

}

 
5. 找到dll文件夹路径 ,然后使用vs.net的“Vsitual Studio .Net工具”-->Vistual Studio .Net命令提示符
进入该dll文件夹下输入:
regasm  HelloWorld.dll<回车>

这时候,这个.dll的.net程序集就变成一个标准的Com组件了,但是还不能用,必须让它变成全局Com组件.
将程序集添加到全局程序集缓存中
进入提示符窗口,输入:

gacutil /I HelloWorld.dll<回车>

 
这时,你的这个dll就被复制到全局程序集缓存中了.也就是说无论在这个电脑的哪个硬盘上都可以使用此dll组件了.
如果不进行强命名签名,这一步会提示加载失败

PHP调用C#开发的dll类库方法

PHP测试:

<?php  

$r=new Com("HelloWorld.Hello");  

$s=$r->Write();  

echo $s;  

?>
 
命令符下:
CD [/D] [drive:][path]  #进入指定路径

CD [..] #返回父目录
PHP 相关文章推荐
PHP 在线翻译函数代码
May 07 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
PHP实现简单数字分页效果
Jul 26 PHP
PHP Yii框架之表单验证规则大全
Nov 16 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
PHP实现限制IP访问的方法
Apr 20 PHP
基于PHP实现栈数据结构和括号匹配算法示例
Aug 10 PHP
利用PHP扩展Xhprof分析项目性能实践教程
Sep 05 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 #PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 #PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 #PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 #PHP
php实现的九九乘法口诀表简洁版
Jul 28 #PHP
完美的2个php检测字符串是否是utf-8编码函数分享
Jul 28 #PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 #PHP
You might like
php 前一天或后一天的日期
2008/06/28 PHP
php微信支付之APP支付方法
2015/03/04 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
学习JavaScript正则表达式
2015/11/13 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
JavaScript入门教程之引用类型
2016/05/04 Javascript
Javascript小技能总结(推荐)
2016/06/02 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
微信小程序的分类页面制作
2017/06/27 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
vue项目中api接口管理总结
2018/04/20 Javascript
详解关于Vue版本不匹配问题(Vue packages version mismatch)
2018/09/17 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
Python 命令行参数sys.argv
2008/09/06 Python
Python 文件操作实现代码
2009/10/07 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
pytorch 准备、训练和测试自己的图片数据的方法
2020/01/10 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
群众路线剖析材料
2014/02/02 职场文书
社区健康教育工作方案
2014/06/03 职场文书
保险公司演讲稿
2014/09/02 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL