php调用c#的dll(转) - xihong

时间:2024-03-04 12:47:05

php调用c#的dll(转)

这几天,一直在做DES ecb模式的加解密,刚用.net实现了加解密,完了由于需要又要转型成PHP代码,费了九牛二虎之力单独用PHP没能实现,结构看到一篇php直接调用c#里生成的.dll文件的方法,才得以实现。

使用C#创建php可以调用的dll

1. 创建一个 C# Class Library ,命名为:HelloWorld

2. 在解决方案资源管理器里选择属性,在点选左边的 "应用程序"(就是第一个tab) , 然后点击 程序集信息按钮 ,在弹出的Dialog中, 必须在底部勾上: 使程序集必须可见!否则 , 这个dll将不能以COM方式访问 .(  也可以在代码中的类声明中写上[ComVisible(true)] , 效果一样,需要增加using System.Runtime.InteropServices;引用)

 

3. 创建强命名签名文件并使用
  使用vs.net的“Vsitual Studio Tools”-->Vistual Studio .Net命令提示,输入 sn -k d:\HelloWorld.snk回车即创建了强命名签名文件
  打开项目的属性,点选左边‘签名’选项卡,勾上为程序集签名,在 强名称密钥文件 下拉框:处选择<浏览> 选择刚才创建的HelloWorld.snk文件

别忘了保存哦!

4. 创建类库并编译成.dll文件

 

[csharp] view plaincopy
 
  1. namespace HelloWorld  
  2. {  
  3.     [ComVisible(true)]  
  4.     public class Hello  
  5.     {  
  6.         public string Write()  
  7.         {  
  8.   
  9.             return "Hello World";  
  10.         }  
  11.     }  
  12.       
  13. }  


5. 找到dll文件夹路径 ,然后使用vs.net的“Vsitual Studio Tools”-->Vistual Studio 命令提示符
进入该dll文件夹下输入: regasm  HelloWorld.dll<回车>。
这时候,这个.dll的.net程序集就变成一个标准的Com组件了,但是还不能用,必须让它变成全局Com组件.
这个regasm 实用程序将创建一个类型库并在 Windows 注册表中对其进行注册,以使 PhysServer2.dll 中的类对 COM 客户端可用 .
需要做下面步骤
将程序集添加到全局程序集缓存中
进入提示符窗口,输入: gacutil /I HelloWorld.dll<回车>  
这时,你的这个dll就被复制到全局程序集缓存中了.也就是说无论在这个电脑的哪个硬盘上都可以使用此dll组件了.
如果不进行强命名签名,这一步会提示加载失败 或许你的这一步会出错,提示你要提供管理员的权限,不要着急,你可以按照下面的步骤做:

1.)启动任务资源管理器(Ctrl+Shift+Esc),找到explorer.exe,结束进程,不用害怕,系统不会由于此种操作而崩溃,它会使现有的窗口隐藏(像工具栏什么的),但不用担心程序并没有停止

2.)选择文件-->新建任务(运行),在弹出的创建新任务文本框里输入‘explorer.exe’,另外下面的复选框一定要勾选,这样才会使所有用户拥有管理员的权限,完了,继续执行上面的第五步,没问题了!

PHP测试

 

[php] view plaincopy
 
  1. <?php  
  2. $r=new Com("HelloWorld.Hello");  
  3. $s=$r->Write();  
  4. echo $s;  
  5. ?>  

 ok,搞定!

https://www.cnblogs.com/zhangkaijia/archive/2013/03/12/2956364.html

http://blog.csdn.net/norsd/article/details/5312200(二)

C#创建COM组件,并在ASP、PHP中调用方法 http://blog.csdn.net/xmlife/article/details/51635415