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 相关文章推荐
elgg 获取文件图标地址的方法
Mar 20 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
用来解析.htpasswd文件的PHP类
Sep 05 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
yii实现CheckBox复选框在同一行显示的方法
Dec 03 PHP
PHP中使用CURL获取页面title例子
Jan 07 PHP
php插入排序法实现数组排序实例
Feb 16 PHP
php实现图片缩略图的方法
Mar 29 PHP
PHP实现的网站目录扫描索引工具
Sep 08 PHP
PHP对象相关知识总结
Apr 09 PHP
PHP 网站修改默认访问文件的nginx配置
May 27 PHP
laravel如何开启跨域功能示例详解
Aug 31 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
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
bootstrap weebox 支持ajax的模态弹出框
2017/02/23 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
js中的闭包学习心得
2018/02/06 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
使用python 获取进程pid号的方法
2014/03/10 Python
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
Python简单读取json文件功能示例
2017/11/30 Python
Python常见字典内建函数用法示例
2018/05/14 Python
Django 对IP访问频率进行限制的例子
2019/08/30 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
Django中的session用法详解
2020/03/09 Python
基于python实现操作redis及消息队列
2020/08/27 Python
自行车租赁公司创业计划书
2014/01/28 职场文书
成人继续教育实施方案
2014/03/01 职场文书
员工年终考核评语
2014/12/31 职场文书
计划生育责任书
2015/05/09 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis