使用PHP调用C#.net .dll脚本

时间:2014-11-19 12:08:47

标签: c# php

我有一个C#.net dll脚本调用SQL存储过程SELECT的数据,以便运行相关的方法。

我需要使用PHP运行dll,因为我的整个应用程序都是用PHP构建的。

这样做的最佳方式是什么?

我对C#没有任何经验。

修改

我使用:

成功注册了.net dll
RegAsm.exe DllName.dll /tlb:DllName.tlb

我现在应该可以使用PHP的COM()方法来调用dll的函数/方法。

但是,当.net dll注册为程序集时,这些函数是否仍然可以通过COM()方法访问?它有所作为吗?

修改

注册.net dll程序集后,当我尝试使用COM()调用该方法时收到错误消息:

"PHP Fatal error:  Uncaught exception 'com_exception' with message 'Failed
 to create COM object `DllName.ClassName': Invalid syntax"

修改

尝试使用:

new DOTNET('DllName, Version=4.0.30319.33440, Culture=neutral,
PublicTokenKey=14843e0419858c21', 'ClassName');

发生internal server 500错误

这是因为PHP不与.net 4程序集通信吗?

2 个答案:

答案 0 :(得分:2)

选项1:使用DLL

您可以使用PHP的COM类调用该函数。

您需要在Windows上运行PHP,如果您正在使用C#DLL,我认为您就是这样。

<强>步骤:

  1. 使用命令提示符中的regasm yourdllname.dll命令或“运行”对话框注册DLL。 对于计算机上安装的每个.NET版本,都有一个 RegAsm.exe ,因此请确保通过从%windir运行它来执行DLL所针对的.NET版本。 %\ Microsoft.NET \ AppropriateVersion
  2. 在PHP中创建一个引用DLL类名的COM对象。
  3. 调用该函数,该函数将作为您已创建的COM对象的方法。
  4. 示例:

    $object = new COM('MyDllProjectName.MyDllClassName');
    $object->myMethod();
    

    选项2:在PHP中重写

    正如已经提到的,更干净,跨平台的选项是直接在PHP中重新实现SQL查询,特别是如果您使用DLL的唯一原因是运行查询。

答案 1 :(得分:1)

直接使用COM有许多警告和问题。

有一个名为NetPhp的库,它使用反射在COM上进行抽象,因此您可以从PHP中调用任何.dll而不会有麻烦:

http://www.drupalonwindows.com/en/blog/calling-net-framework-and-net-assemblies-php