我有一个C#.net dll脚本调用SQL存储过程SELECT
的数据,以便运行相关的方法。
我需要使用PHP运行dll,因为我的整个应用程序都是用PHP构建的。
这样做的最佳方式是什么?
我对C#没有任何经验。
修改
我使用:
成功注册了.net dllRegAsm.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程序集通信吗?
答案 0 :(得分:2)
您可以使用PHP的COM类调用该函数。
您需要在Windows上运行PHP,如果您正在使用C#DLL,我认为您就是这样。
<强>步骤:强>
regasm yourdllname.dll
命令或“运行”对话框注册DLL。
对于计算机上安装的每个.NET版本,都有一个 RegAsm.exe ,因此请确保通过从%windir运行它来执行DLL所针对的.NET版本。 %\ Microsoft.NET \ AppropriateVersion 示例:强>
$object = new COM('MyDllProjectName.MyDllClassName');
$object->myMethod();
正如已经提到的,更干净,跨平台的选项是直接在PHP中重新实现SQL查询,特别是如果您使用DLL的唯一原因是运行查询。
答案 1 :(得分:1)
直接使用COM有许多警告和问题。
有一个名为NetPhp的库,它使用反射在COM上进行抽象,因此您可以从PHP中调用任何.dll而不会有麻烦:
http://www.drupalonwindows.com/en/blog/calling-net-framework-and-net-assemblies-php