zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    不用keytool,tomcat打开https
    sqlserver获取某一张表中的所有列中的最大长度
    不用keytool,tomcat打开https
    到底私钥和公钥哪个是用来加密 哪个是用来解密的
    空间支持php解压
    到底私钥和公钥哪个是用来加密 哪个是用来解密的
    sqlserver获取某一张表中的所有列中的最大长度
    数字签名(代码签名)流程
    功夫电影中非常经典(武术非常实用)
    数字签名(代码签名)流程
  • 原文地址:https://www.cnblogs.com/xihong2014/p/8407333.html
Copyright © 2011-2022 走看看