欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP调用C#开发的dll类库方法

程序员文章站 2023-11-11 23:33:22
有的时候,我们需要在php中利用到其他语言编写的dll类库,如c#编写的dll,方法就是利用php new com方法来调用,在调用之前先要把dll库注册并把程序集放入到全...

有的时候,我们需要在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 [..] #返回父目录