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中批量修改文件后缀名的函数代码
Oct 23 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
mysql_escape_string()函数用法分析
Apr 25 PHP
项目中应用Redis+Php的场景
May 22 PHP
smarty中改进truncate使其支持中文的方法
May 30 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
微信推送功能实现方式图文详解
Jul 12 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实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
php  单例模式详细介绍及实现源码
2016/11/05 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
javascript web页面刷新的方法收集
2009/07/02 Javascript
监控 url fragment变化的js代码
2010/04/19 Javascript
提高jQuery性能的十个诀窍
2013/11/14 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
Backbone.js中的集合详解
2015/01/14 Javascript
vue npm install 安装某个指定的版本操作
2020/08/11 Javascript
[01:18:36]LGD vs VP Supermajor 败者组决赛 BO3 第一场 6.10
2018/07/04 DOTA
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
python在回调函数中获取返回值的方法
2019/02/22 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
新西兰最大的品牌运动鞋购物网站:Platypus NZ
2017/10/27 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
应届生求职推荐信
2013/10/28 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
宿舍使用违章电器检讨书
2014/01/12 职场文书
将相和教学反思
2014/02/04 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
2014年接待工作总结
2014/11/26 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
自我推荐信怎么写
2015/03/24 职场文书
2015年档案室工作总结
2015/05/23 职场文书
防溺水主题班会教案
2015/08/12 职场文书
2016年中学清明节活动总结
2016/04/01 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis