使用DOTNET类与COM端口通信

问题描述

搜索某个已经使用DOTNET类与COM端口通信的人。 在一个e-Health PHP项目中,我进行搜索以从智能卡中获取数据。 在采用Linux保留的几种方法之后, 我发现该DOTNET类被允许访问端口以与外部设备通信。

$serial = new DOTNET('system','System.IO.Ports.SerialPort');
$serial->PortName = 'COM8';
$serial->open();

我按照另一个论坛上的指示修改文件PHP.ini,以取消对这三行的注释,但这似乎还不够:

extension=PHP_com_dotnet.dll   
extension_dir = "ext"   
enable_dl = On

当尝试打开连接时,Wamp向我发送以下错误消息:

Fatal error: in C:\wamp64\www\node-project\patients.PHP on line 204

com_exception: in C:\wamp64\www\node-project\patients.PHP on line 204

解决方法

请参阅此页上的评论。
PHP: dotnet - Manual

dotnet类允许您从.Net程序集实例化一个类,并调用其方法并访问其属性(如果该类以及方法和属性对COM是可见的)。

既不实例化静态类也不调用静态方法。

某些.Net类未实现IDispatch,因此可以实例化它们,但不支持在这些类上调用方法或访问属性。

注意:
.net Framework 4.0及更高版本不受dotnet类的支持。如果程序集已经在regasm.exe中注册,则可以将这些类实例化为com对象。

juan156_elias at gmail dot com

直接使用COM和DOTNET是一个噩梦。 DOTNET仅​​允许您以.Net 3.5及更低版本为目标,并且所有二进制文件都必须是COM可见的。这基本上意味着您将需要为所有内容(至少包装程序)编写自己的.Net二进制文件。

您不能像问题文章中提到的那样直接使用.NET API,您必须使用.NET 3.5或更低版本的框架来创建和注册COM可见包装,然后调用它。