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 相关文章推荐
isset和empty的区别
Jan 15 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
Jan 10 PHP
PHP伪静态写法附代码
Jun 20 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
Aug 23 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
php使用gzip压缩传输js和css文件的方法
Jul 29 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
php图片上传类 附调用方法
May 15 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
PHP实现移除数组中为空或为某值元素的方法
Jan 07 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
Aug 10 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
一个简易需要注册的留言版程序
2006/10/09 PHP
PHP开发框架总结收藏
2008/04/24 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
2014/01/17 PHP
php简单防盗链实现方法
2015/07/29 PHP
PHP文件与目录操作示例
2016/12/24 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python删除服务器文件代码示例
2018/02/09 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
CSS中垂直居中的简单实现方法
2015/07/06 HTML / CSS
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
乌克兰移动电子产品和相关配件的在线商店:iTMag
2020/03/16 全球购物
C语言编程练习
2012/04/02 面试题
C#如何进行LDAP用户校验
2012/11/21 面试题
银行实习自我鉴定
2013/10/12 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
简单租房协议书
2014/10/21 职场文书
勤俭节约主题班会
2015/08/13 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP