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文件
- namespace HelloWorld
- {
- [ComVisible(true)]
- public class Hello
- {
- public string Write()
- {
- return "Hello World";
- }
- }
- }
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
- $r=new Com("HelloWorld.Hello");
- $s=$r->Write();
- echo $s;
- ?>
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
php调用c#的dll(转)的更多相关文章
- 调用Interop.zkemkeeper.dll无法使用解决方案
调用Interop.zkemkeeper.dll无法使用 已经注册dll成功但是还是报错 检索 COM 类工厂中 CLSID 为 {00853A19-BD51-419B--2DABE57EB61F} ...
- c# 传递Null的string值导致的调用C++的dll报错 Attempted to read or write protected memory.
c# 调用C++的dll报错 Attempted to read or write protected memory: 原因是:c# 传递Null的string值导致的,将Null改为string ...
- Node调用C++(dll)
最近开始搞毕设了,打算用自己拿手的js来搞,但是仿佛入坑了,Node还不是很熟.总之,兵来将挡,水来土掩嘛,带着问题学习才是最高效的. 折腾1:Node 调用 C++ 刚开始,虽然我老师把dll文件给 ...
- golang调用c++的dll库文件
最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:一.DLL 的编制与具体的编程语言及编译器无关 dll分com的dll和动态dll,Com组件dll:不管是何种语言写的都可以 ...
- vs2010下C++调用lib或dll文件
注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1 设置工程的 ...
- paip.java c# .net php python调用c++ c dll so windows api 总结
paip.java c# .net php python调用c++ c dll so windows api 总结 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来 ...
- c++builder调用VC的dll以及VC调用c++builder的dll
解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式. 比如说__cdecl,它是标准的c方法的堆栈调用方式,就 ...
- LabView调用C#混合模式dll
在一些特定要求下,我们的C#可能需要制作dll给LabView进行调用,并且我们不能够保证C#的程序是完全自己写而不调用第三方的dll库.很多时候我们需要使用诸如Sqlite.Net.AForge.N ...
- 关于c#调用c/c++ dll遇到的问题总结
前段时间公司做了个winform程序,需要调用c 的dll去读取卡号的程序,期间遇到些问题,下面来分享下 一.dll路径问题 相信很多开发者都会遇到这个问题,我总结了下我现在有3总方式去解决这个问题: ...
- C#调用C++的DLL搜集整理的所有数据类型转换方式
//C#调用C++的DLL搜集整理的所有数据类型转换方式,可能会有重复或者多种方案,自己多测试 //c++:HANDLE(void *) ---- c#:System.IntPtr //c++:Byt ...
随机推荐
- L314 单音节词读音规则(二)-元音字母发音规则
1 单个元音发音尽量拖音一下(2S),发音会饱满一些. 2开音节: 辅音(辅组)(没有)+元音+辅音+e 的单词其中:元音发字母本身音,辅音字母不为r , 字母e不发音. 相对开音节:第一个元音都发字 ...
- ios scrollView代理的用法
// // ZQRViewController.m // 03-图片缩放 // // Created by apple on 17-08-25. // #import "ZQRViewCon ...
- 解决Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext
我使用的是5.2.8的hibernate的jar包,运行的时候却报错Could not open Hibernate Session for transaction; nested exception ...
- vue优势
Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API: 我们都知道单页面应用:页面切换快 ,首屏时间稍慢,SEO差 js 渲染 (多页面应用: 首屏时间快 ...
- 关于dc.add(Restrictions.like("XXX", "%"+XXX+"%"))查询不到结果,但数据库中存在
找了好久,最后发现是连接池的jdbc.jdbcUrl=jdbc:mysql:///XXX没有写编码格式 把jdbc.jdbcUrl改为jdbc:mysql:///XXX?characterEncodi ...
- HDU 6077 17多校4 Time To Get Up 水题
Problem Description Little Q's clock is alarming! It's time to get up now! However, after reading th ...
- Linux 对文件进行加密存放
/********************************************************************** * Linux 对文件进行加密存放 * 说明: * Gi ...
- 了解Git的工作区和暂存区
Git有工作区,暂存区之分. 1.工作区 我们电脑上的某个被Git管理的文件夹,就是一个工作区. 比如说我的GitWorkText文件夹,如图: 2.版本库(Repository) 在工作区有一个隐藏 ...
- tcp/ip网络里的客户端和服务器端 信息交流 与 安全
ISP(Internet Service Provider) 互联网服务提供商, 即向广大用户综合提供互联网接入业务.信息业务.和增值业务的电信运营商. 通过wireshark学习tcp/ip. 用w ...
- P2216 [HAOI2007]理想的正方形(dp+单调队列优化)
题目链接:传送门 题目: 题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表 ...