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读取30天之内的根据算法排序的代码
Apr 06 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
May 04 PHP
symfony表单与页面实现技巧
Jan 26 PHP
php数组冒泡排序算法实例
May 06 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
Jul 20 PHP
利用PHP如何写APP接口详解
Aug 23 PHP
分析php://output和php://stdout的区别
May 06 PHP
centos7上编译安装php7以php-fpm方式连接apache
Nov 08 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
Sep 17 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实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
用 JSON 处理缓存
2007/04/27 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
利用JavaScript实现栈的数据结构示例代码
2017/08/02 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:03:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第一场 1月29日
2021/03/11 DOTA
python:socket传输大文件示例
2017/01/18 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
python opencv设置摄像头分辨率以及各个参数的方法
2018/04/02 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
Python检查ping终端的方法
2019/01/26 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
浅谈matplotlib中FigureCanvasXAgg的用法
2020/06/16 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
pytorch中index_select()的用法详解
2021/01/06 Python
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
运动会铅球比赛加油稿
2014/09/26 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
学生安全责任协议书
2016/03/22 职场文书
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL