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

2. 打开项目的属性,在点选左边的 “Application”(就是第一个tab) , 然后点击 Assembly Information 按钮 ,在弹出的Dialog中, 必须在底部勾上: Make assembly COM-visible !否则 , 这个dll将不能以COM方式访问 .(  也可以在代码中的类声明中写上[ComVisible(true)] , 效果一样,需要增加using System.Runtime.InteropServices;引用)

3. 创建强命名签名文件并使用

使用vs.net的“Vsitual Studio .Net工具”–>Vistual Studio .Net命令提示符,输入 sn -k d:\ClassLibraryDemo.snk回车即创建了强命名签名文件

打开项目的属性,点选左边Signing 勾上Sign the assembly 在 Choose a strong name key file:处选择<Browse> 选择刚才创建的HelloWorld.snk文件

4. 创建类库并编译成dll

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;namespace ClassLibraryDemo
{[ComVisible(true)]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组件.

这个regasm 实用程序将创建一个类型库并在 Windows 注册表中对其进行注册,以使 PhysServer2.dll 中的类对 COM 客户端可用 .

需要做下面步骤

将程序集添加到全局程序集缓存中

进入提示符窗口,输入: gacutil /I ClassLibraryDemo.dll<回车>

这时,你的这个dll就被复制到全局程序集缓存中了.也就是说无论在这个电脑的哪个硬盘上都可以使用此dll组件了.

如果不进行强命名签名,这一步会提示加载失败

PHP测试

<?php
$r=new Com("ClassLibraryDemo.Hello");
$s=$r->Write();
echo $s;
?>

问题:到第五步失败了。。后续补充。。。

转载于:https://www.cnblogs.com/xcsn/p/3481987.html

使用c#创建php可以调用的dll相关推荐

  1. vs2008 C++创建和调用标准DLL

    为了共享代码,需要生成标准的dll,本文将介绍在vs2008 C++生成及调用dll. 一.生成DLL 生成一个名为FunDll的dll文件,对外函数为addl. step1:vs2008 环境下,文 ...

  2. VC++6.0如何创建与调用动态链接库(dll)

    VC++支持的DLL: DLL的编制与具体的编程语言及编译器无关,动态链接库随处可见,VC++支持三种DLL:非MFC动态库.MFC规则DLL和MFC扩展DLL.DLL导出函数(或变量.类)可供应用程 ...

  3. C# 调用C++ dll 返回char*调用方式(StringBuilder乱码)

    // CDLLDemo.cpp : 定义 DLL 应用程序的导出函数. // #include "stdafx.h" #include "string.h" # ...

  4. C#调用C++DLL类的方法

    C++的优势在于高效灵活,C#的优势在于简单易用,两者结合起来对项目开发来说是件好事,而且C++不容易反编译,也保障了代码的安全性,如果一些核心算法使用C#编写,那么保密就是一个问题.     C++ ...

  5. 非常好的dllimport 文章--在 C# 中通过 P/Invoke 调用Win32 DLL

    http://msdn.microsoft.com/zh-cn/library/aa686045.aspx 在 C# 中通过 P/Invoke 调用Win32 DLL 发布日期 : 1/13/2005 ...

  6. 10.4.4 使用ctypes调用kernel32.dll中的函数

    10.4.4 使用ctypes调用kernel32.dll中的函数 2007-10-17 14:41 孙广磊 人民邮电出版社 字号:T | T 综合评级: 想读(5)  在读(0)  已读(6)   ...

  7. C++动态(显式)调用 C++ dll示例

    1.创建DLL新项目Dll1,Dll1.cpp: 1 extern "C" __declspec(dllexport) const char* myfunc() 2 { 3 ret ...

  8. C#调用C++Dll封装时遇到的一系列问题 参考

     在合作开发时,C#时常需要调用C++DLL,当传递参数时时常遇到问题,尤其是传递和返回字符串是,现总结一下,分享给大家: VC++中主要字符串类型为:LPSTR,LPCSTR, LPCTSTR, ...

  9. c#调用外部dll详解

     一.      DLL与应用程序 动态链接库(也称为DLL,即为"Dynamic Link Library"的缩写)是Microsoft Windows最重要的组成要素之一, ...

最新文章

  1. Python+Django+Eclipse 在Windows下快速开发自己的网站
  2. Markdown中数学公式练习
  3. 【NLP】bert4vec:一个基于预训练的句向量生成工具
  4. bread是可数还是不可数_​面包bread是可数名词还是不可数
  5. python 使用标准库连接linux实现scp和执行命令
  6. Lucene分类统计示例
  7. 设计模式 - Composite
  8. 11G Oracle RAC添加新表空间时数据文件误放置到本地文件系统的修正
  9. kubernetes实践之运行aspnetcore webapi微服务
  10. Python学习笔记之Windows下通过pip安装PyMySQL
  11. 家装软件相关算法和技术归纳
  12. 阿里云网关签名特殊字符无法通过
  13. 交换机与路由器技术:VLAN Trunk、单臂路由和三层交换及配置
  14. matplotlib之pyplot模块之坐标轴配置(axis():设置坐标轴外观、设置坐标轴范围)
  15. 什么是Websocket以及Nginx实现ws代理
  16. 春暖花开,我们去踏青
  17. 平安科技从 Oracle 迁移到 UbiSQL 的实践
  18. pythonista免费下载-pythonista 3ios
  19. 关于branch XYZ is published (but not merged) and is now N commits behind错误的解决方法
  20. 迷茫?生命科学如何破局冰山!道翰天琼认知智能机器人平台API接口大脑为您揭秘-64

热门文章

  1. FMCW毫米波雷达原理
  2. logistic regression一点理解
  3. Tensorflow教程: tf.Variable() 和tf.get_variable()
  4. 关于国土空间规划的价值的一些思考
  5. 村土地利用规划和村庄规划的区别和联系
  6. c++框架有哪些_平顶彩钢活动房特点以及用途有哪些?
  7. linux添加驱动目录,Android系统添加Linux驱动
  8. typescript和 java区别_typescript中interface和type的区别
  9. 等产量曲线中r_微观经济学第四章练习题
  10. webpack整体了解