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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
SSI指令
Nov 25 PHP
测试php函数的方法
Nov 13 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
微信公众号实现会员卡领取功能
Jun 08 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
yii2多图上传组件的使用教程
May 10 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 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表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
js排序与重组的实例讲解
2017/08/28 Javascript
浅谈React深度编程之受控组件与非受控组件
2017/12/26 Javascript
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
vue使用v-for实现hover点击效果
2018/09/29 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
ES5新增数组的实现方法
2020/05/12 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
python实现彩色图转换成灰度图
2019/01/15 Python
Numpy之random函数使用学习
2019/01/29 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
Python如何实现机器人聊天
2020/09/10 Python
俄罗斯三星品牌商店:Samsungstore
2020/04/05 全球购物
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
管理站站长岗位职责
2013/11/27 职场文书
建材业务员岗位职责
2013/12/08 职场文书
实习鉴定评语
2014/01/19 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
护士旷工检讨书
2015/08/15 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书
七年级作文之秋游
2019/10/21 职场文书
CSS3 实现的图片悬停的切换按钮
2021/04/13 HTML / CSS
vue首次渲染全过程
2021/04/21 Vue.js