【问题标题】:PHP DOTNET Interop with C# Windows Form Application?PHP DOTNET 与 C# Windows 窗体应用程序的互操作?
【发布时间】:2014-12-17 05:19:55
【问题描述】:

是否可以让 PHP 与正在运行的 C# Windows 窗体应用程序交互?

我之前创建了 COM 公开的 DLL,并使用 DOTNET 对象从 PHP 调用它们,但它似乎不适用于“Windows 窗体应用程序”。我是否需要制作 COM DLL 并让它以某种方式与 Windows 窗体应用程序交互?

编辑:

我决定在 .NET3.5 客户端框架中编写一个快速的 EXE,然后看看这些方法是否可用于 PHP。看来我现在正在运行方法,奇怪!我猜它只能使用 v3.5 客户端而不是 v4.5。

这是 C# 和 PHP 代码:

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Example.Interop.FormText
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public int Sum(int a, int b)
        {
            return a + b;
        }
        public int Minus(int a, int b)
        {
            return a - b;
        }
    }
}

PHP

<?php
    $app = new DOTNET("Example.Interop.FormText", "Example.Interop.FormText.Form1");
    echo $app->Minus(19, 20);
?>

我还没有测试我是否可以运行与 UI 交互的函数。接下来将对其进行测试,但不幸的是,我认为我不能为这个项目回退到 v3.5。

【问题讨论】:

  • 你能修改windows窗体应用程序以在内部公开一些REST或HTTP SOAP服务吗?如果您可以访问它,这可能会变得容易得多。
  • 老实说,我试图快速取胜,而不是编写某种服务器和身份验证。正如我所说,只要 DLL 打开了 COM-Visible,我就已经成功地使用 DOTNET 从 C# .net3.5 DLL 运行方法。从 PHP 它就像 1 行代码,不知道为什么我不能用 EXE 来做。

标签: c# php com interop


【解决方案1】:

你想要的是这个:

进程外通信组件

实际上,我在 15 年前用一个 VB6 程序做到了这一点,它就像你说的那样完美运行!它有一个主窗体,我从一个 ASP 3.0 站点上找到它。它包含网站应用程序的内容并充当管理员,但在触发 COM 方法时,我更新 UI 也没有问题。

描述来自下面的链接(由于问题的复杂性,这个答案没有它是无用的;该链接包含一个下载示例应用程序。如果链接失效,也许您可​​以谷歌此文本)。

在 Microsoft Windows 操作系统中,Microsoft COM 技术使软件组件能够与其他软件组件进行通信。您可以使用 Microsoft COM 技术来创建可重用的软件组件。您还可以通过将这些组件链接在一起并利用 Windows 服务来开发应用程序。
进程外服务器对象在可执行文件中实现,并在单独的进程空间中运行。

http://support.microsoft.com/kb/977996

【讨论】:

  • 我花了一段时间才知道,但我相信这是我最初问题的答案。我不确定如何实现它,但我想那是另一个问题。谢谢!
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多