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

C# 使用PHP调用C.net.dll脚本,c#,php,C#,Php,我有一个C.NETDLL脚本,它调用一个SQL存储过程来选择数据,以便运行相关的方法 我需要使用PHP运行dll,因为我的整个应用程序都是用PHP构建的 这样做的最佳方式是什么 我对C完全没有经验 编辑 我已使用以下方法成功注册.net dll: RegAsm.exe DllName.dll /tlb:DllName.tlb 我现在应该能够使用PHP的COM方法调用dll的函数/方法,如下所述 但是当.net dll注册为程序集时,这些函数仍然可以通过COM方法访问吗?这有区别吗 编辑 注册.

我有一个C.NETDLL脚本,它调用一个SQL存储过程来选择数据,以便运行相关的方法

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

这样做的最佳方式是什么

我对C完全没有经验

编辑

我已使用以下方法成功注册.net dll:

RegAsm.exe DllName.dll /tlb:DllName.tlb
我现在应该能够使用PHP的COM方法调用dll的函数/方法,如下所述

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

编辑

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

编辑

尝试使用:

new DOTNET('DllName, Version=4.0.30319.33440, Culture=neutral,
PublicTokenKey=14843e0419858c21', 'ClassName');
获取内部服务器500错误

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

选项1:使用DLL 可以使用PHP的COM类调用该函数

您需要在Windows上运行PHP,如果您使用的是C DLL,我假设您是这样的

步骤:

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

选项2:用PHP重写
如前所述,更干净、跨平台的选项是直接在PHP中重新实现SQL查询,特别是当您使用DLL的唯一原因是运行查询时。

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

有一个名为NetPhp的库,它使用反射在COM之上进行抽象,这样您就可以轻松地从PHP中调用任何.dll:


最好的方法是将查询转换为PHP实现。您也可以使用exec php函数,但我认为在前端不是shell的情况下使用这段代码被认为是不好的做法。我对C语言理解不够,无法转换为php。这是我的第一个想法,哈哈。但是这个脚本对我来说是希腊语,它似乎在调用c函数。你说的c脚本是什么意思?C被编译成exe或dll。不知何故,查询应该被扣除,但如果没有源代码,我们无法对此给出准确的答案…脚本是一个.dll文件选项3通过Web服务访问dll我很困惑,myMethod从何而来?它在那里被实例化了吗?那么我该如何调用它呢?您应该将myMethod替换为调用DLL中SQL存储过程的method函数的名称。我尝试注册DLL,但遇到一个错误,即..未找到入口点DllRegisterServer尝试使用regasm C:\Windows\Microsoft.NET\Framework\YourVersion\regasm.exe而不是regsvr32。语法相同:regasm yourdllname.dll。
new DOTNET('DllName, Version=4.0.30319.33440, Culture=neutral,
PublicTokenKey=14843e0419858c21', 'ClassName');
$object = new COM('MyDllProjectName.MyDllClassName');
$object->myMethod();