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 相关文章推荐
最小化数据传输――在客户端存储数据
Oct 09 PHP
MySQL GBK→UTF-8编码转换
May 24 PHP
用PHP读取RSS feed的代码
Aug 01 PHP
PHP 高级课程笔记 面向对象
Jun 21 PHP
PHP数据类型的总结分析
Jun 13 PHP
php多用户读写文件冲突的解决办法
Nov 06 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
PHP的引用详解
Feb 22 PHP
实例讲解yii2.0在php命令行中运行的步骤
Dec 01 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 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
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP-Fcgi下PHP的执行时间设置方法
2013/08/02 PHP
php模板原理讲解
2013/11/13 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
Tab页界面,用jQuery及Ajax技术实现
2009/09/21 Javascript
基于MooTools的很有创意的滚动条时钟动画
2010/11/14 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
jquery图片上下tab切换效果
2011/03/18 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
AngularJS实现进度条功能示例
2017/07/05 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
Python入门篇之列表和元组
2014/10/17 Python
在Python的Bottle框架中使用微信API的示例
2015/04/23 Python
Python 爬虫多线程详解及实例代码
2016/10/08 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
用pycharm开发django项目示例代码
2019/06/13 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
我们是伦敦女孩:WalG
2018/01/08 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
单位门卫岗位职责
2013/12/20 职场文书
《要下雨了》教学反思
2014/02/17 职场文书
法学专业毕业生自荐信
2014/06/11 职场文书
协会周年庆活动方案
2014/08/26 职场文书
大学生交通专业求职信
2014/09/01 职场文书
Python中re模块的元字符使用小结
2022/04/07 Python