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

   这篇文章主要介绍了PHP调用C#开发的dll类库方法,包含一个完整的详细的DLL制作步骤和PHP调用方法,需要的朋友可以参考下

  有的时候,我们需要在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;引用)


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

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

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


  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测试:

  复制代码 代码如下:

  

  $r=new Com("HelloWorld.Hello");

  $s=$r->Write();

  echo $s;

  ?>

  命令符下:

  复制代码 代码如下:

  CD [/D] [drive:][path] #进入指定路径

  CD [..] #返回父目录

时间: 2025-01-21 02:51:01

PHP调用C#开发的dll类库方法的相关文章

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

有的时候,我们需要在php中利用到其他语言编写的dll类库,如C#编写的dll,方法就是利用PHP new COM方法来调用,在调用之前先要把dll库注册并把程序集放入到全局缓存中. 1. 创建一个 C# Class Library ,命名为:HelloWorld2. 打开项目的属性,在点选左边的 "Application"(就是第一个tab) , 然后点击Assembly Information 按钮 ,在弹出的Dialog中, 必须在底部勾上: Make assembly COM-

c#调用c++开发的dll const char* 返回值接收问题

原文:c#调用c++开发的dll const char* 返回值接收问题 用c#调用视频接口相关的dll,dll使用c++开发. c++接口定义如下: PLATFORM const char* Plat_GetValueStr(const char* propertyName, int iUserHandle);   c#接口定义如下: [DllImport(@"Platform.dll", EntryPoint = "Plat_GetValueStr", Char

vs2003调用2005开发的dll?

问题描述 别人提供给我一个vs2005开发的dll.我怎么在vs2003里调用呢?那个dll里面其实就是几个转换函数.很简单的. 解决方案 解决方案二:在项目上右键--添加引用--浏览,找到你要引用的dll文件解决方案三:版本不对,能调用吗.还不如反编译一下.把代码搞出来,放到自己的工程里呢.解决方案四:如果vs2005写的dll是程序集或com组件那么用vs2003可以调用,否则不能调用,但用vs2005可以调用vs2003写的dll解决方案五:引用2楼greystar的回复: 版本不对,能调

使用IDispatch::Invoke函数在C++中调用C#实现的托管类库方法

CLR Interop简而言之是让非托管代码与托管代码之间可以相互调用的技术.这项技术可以使开发人员重用已有的托管或非托管组建,并根据自己的需要,权衡托管代码的简易性与非托管代码的灵活性,选择适合自己实际情况的编程语言,而不用过多考虑重用的组件是用哪种语言开发的.Interop中文的意思是互通性,既然是互通,代码的调用就有两种不同的方向.本文所要讲述的是使用COM Interop技术在非托管代码方如何调用托管代码. 1. 创建托管服务器 首先让我们在Visual Studio 2008创建一个C

C# 制作Com组件:java调用.net DLL的方法

本文将详细为大家介绍一个java调用.net DLL的方法,以实现特殊的客户的特殊要求:"在Java项目中必须使用其提供的用.net写的DLL加密机制!" 环境与工具: ◆.net framework 3.5 C# ◆java jdk1.5, Tomcat 5.5 ◆jacob-1.15-M3 实现例子: 一.C# 制作Com组件 新建一个Class 项目,取名TestCom 代码 using System;  using System.Collections.Generic;  us

C#开发ActiveX求助...引用了一个第三方的dll,编译通过了。安装调用的时候调用不到这个dll

问题描述 C#开发ActiveX求助...引用了一个第三方的dll,编译通过了.安装包制作安装,通过ie调用的时候调用ActiveX没有引用到第三方dll的方法都可以正常使用,引用到第三方dll的方法调用都没反应,感觉是第三方dll没有加载到,但是我dll跟ActiveX放的同个目录,网上找了好多方法,试过把第三方dll复制到windows.system32.浏览器根目录下都没有用.请高手指点. 解决方案 解决方案二:注册全局的DLL写ActiveX的时候用动态引用之类的都可以解决....以前碰

C#中能否调用CAB中的C开发的dll?怎么调用?

问题描述 C#中能否调用CAB中的C开发的dll?怎么调用?.求高手指点!!! 解决方案 解决方案二: 解决方案三:C中的方法为:publicvirtualstringgetVersion()是ICBC_NETSIGNLib.InfoSecICBCNetSignClass的成员.C#怎么调用?[DllImport("ICBC_NetSign_64.dll",EntryPoint="getVersion",CharSet=CharSet.Ansi,CallingCon

C++调用C#的DLL实现方法_C 语言

SwfDotNet是C#编写的,这是个特别好的读写Swf文件的库.本文讲述了在C++项目中,怎么让C++调用C#的DLL动态链接库文件. 具体的实现步骤如下: 一.创建C# DLL,需要指定应用类型为"类库",代码: namespace CSLib { public class Class1 { private string name; public string Name { get { return name; } set { name = "Your Name: &qu

PHP如何调用C# dll 类库?我来告诉你

有的时候,我们需要在php中利用到其他语言编写的dll类库,如C#编写的dll,方法就是利用PHP new COM方法来调用,在调用之前先要把dll库注册并把程序集放入到全局缓存中. 1. 创建一个 C# Class Library ,命名为:HelloWorld 2. 打开项目的属性,在点选左边的 "Application"(就是第一个tab) , 然后点击 Assembly Information 按钮 , 在弹出的Dialog中, 必须在底部勾上: Make assembly C