使用 PHP 调用 C# .net .dll 脚本
Posted
技术标签:
【中文标题】使用 PHP 调用 C# .net .dll 脚本【英文标题】:Call a C# .net .dll script using PHP 【发布时间】:2015-01-16 22:46:45 【问题描述】:我有一个 C# .net dll 脚本,它调用SELECT
s 数据的 SQL 存储过程,以便运行相关方法。
我需要使用 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 程序集通信吗?
【问题讨论】:
最好的方法是将查询转换为 PHP 实现。您也可以使用exec()
php 函数,但我认为当前端不是外壳时使用此代码被认为是不好的做法..
我对 C# 语言的了解不足以转换为 PHP。这是我的第一个想法哈哈。但脚本对我来说是希腊语,它似乎在调用 c# 函数。
C# 脚本是什么意思? C# 被编译成 exe 或 dll。
某处,不知何故应该扣掉查询,但是没有源代码,我们无法给出准确的答案……
脚本是一个.dll文件
【参考方案1】:
选项 1:使用 DLL
您可以使用 PHP 的 COM 类调用该函数。
您需要在 Windows 上运行 PHP,如果您使用 C# DLL,我假设您是这样。
步骤:
-
在命令提示符或运行对话框中使用命令
regasm yourdllname.dll
注册 DLL。
您的计算机上安装的每个 .NET 版本都有一个 RegAsm.exe,因此请确保通过从 %windir 运行 DLL 所针对的 .NET 版本执行一个%\Microsoft.NET\AppropriateVersion。
在 PHP 中创建一个引用 DLL 类名的 COM 对象。
调用函数,该函数将作为您创建的 COM 对象的方法使用。
示例:
$object = new COM('MyDllProjectName.MyDllClassName');
$object->myMethod();
选项 2:用 PHP 重写
如前所述,更简洁、跨平台的选项是直接在 PHP 中重新实现 SQL 查询,尤其是当您使用 DLL 的唯一原因是运行查询时。
【讨论】:
选项 3 通过 web 服务访问 DLL 我很困惑,myMethod()
来自哪里?它是在那里实例化的吗?那我怎么称呼它?
您可以将myMethod
替换为在您的DLL 中调用SQL 存储过程的方法(函数)的名称。
我尝试注册 dll,但出现错误提示 ..the-entry point DllRegisterServer was not found
尝试使用regasm
(C:\Windows\Microsoft.NET\Framework\YourVersion\RegAsm.exe) 而不是regsvr32
。语法相同:regasm yourdllname.dll
.【参考方案2】:
直接使用 COM 有很多注意事项和问题。
有一个名为 NetPhp 的库使用反射在 COM 之上进行抽象,因此您可以从 PHP 中轻松调用任何 .dll:
http://www.drupalonwindows.com/en/blog/calling-net-framework-and-net-assemblies-php
【讨论】:
以上是关于使用 PHP 调用 C# .net .dll 脚本的主要内容,如果未能解决你的问题,请参考以下文章