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

我有一个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程序集通信吗?

选项1:使用DLL

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

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

脚步:

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

例:

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

选项2:用PHP重写

如前所述,更清晰,跨平台的选项是直接在PHP中重新实现SQL查询,特别是如果您使用DLL的唯一原因是运行查询。

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

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

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