Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#和Delphi应用程序之间进行通信?_C#_Delphi_Communication - Fatal编程技术网

如何在c#和Delphi应用程序之间进行通信?

如何在c#和Delphi应用程序之间进行通信?,c#,delphi,communication,C#,Delphi,Communication,我需要将我的应用程序(从现在开始Delphi+MS SQL Server:D)与另一个应用程序(从现在开始c#+SQL Server:c)连接起来 C有一个简约的Windows窗体用户界面,它所做的主要工作是连接到PDA发送和接收来自PDA的数据 所以他们的想法是删除C用户界面的UI,只保留与DB和PDA通信所需的代码 所以我需要C能和D说话,反之亦然 D到C:所以在某些事件上(比如TButton.OnPress),D会向C发送一些数据。所以我需要调用C公开的方法 C到D:D需要对C执行的某些操

我需要将我的应用程序(从现在开始Delphi+MS SQL Server:D)与另一个应用程序(从现在开始c#+SQL Server:c)连接起来

C有一个简约的Windows窗体用户界面,它所做的主要工作是连接到PDA发送和接收来自PDA的数据

所以他们的想法是删除C用户界面的UI,只保留与DB和PDA通信所需的代码

所以我需要C能和D说话,反之亦然

D到C:所以在某些事件上(比如TButton.OnPress),D会向C发送一些数据。所以我需要调用C公开的方法

C到D:D需要对C执行的某些操作做出反应。因此C将调用D公开的一些方法。即使在第一阶段,D只会“公开一个存储过程”

我从来没有做过这样的事。怎么办?D当前是单个exe(win32)


你建议使用哪种技术?

我想你可以使用套接字。您可以使用自己的协议,也可以使用Web服务,但后者相当复杂。Delphi有WSDL导入程序,一个C++有库。它是较低级别上的附加层,但可能会使事情更简单。

如果它们都使用相同的数据库,您可以将其用作它们之间的管道

在一个应用程序中,写入特定的表,在另一个应用程序中,通过定期轮询该表来“侦听”该表,删除任何已处理的“消息”


这是一个总体想法,好处是您现在就可以不用使用任何库就可以做到这一点。

作为我可以提供的选项之一,它是一个轻量级的面向消息的中间件,可以轻松解决您的问题。MsgConnect可用于Delphi和C#。上面提到的RemObjects SDK也是一个很棒的产品,尽管对于您的简单任务来说可能有点过头了

如果要删除C中的用户界面,那么我建议将C封装在一个COM对象中,您可以从Delphi透明地使用它。

有很多选项。套接字可能是最健壮的,但如果两个应用程序在同一台机器上运行,则可以使用窗口消息(
WndProc
和朋友)或命名管道。

我正在使用现有的Delphi应用程序与新的.NET应用程序进行通信。我将应用程序包装到一个DLL中,使用公开的函数从.NET调用,并使用回调过程从.NET向Delphi通信。

您可以使用ZeroMQ。它是一个免费的面向消息的堆栈。

我的框架可以在Delphi和Visual Studio下运行,因此允许Win32和.NET应用程序之间跨原始TCP套接字进行通信。

您可以将C代码转换为DLL(类库)。设置选项“使部件COM可见”。创建新的证书(如果需要)并签署代码

在Windows中注册C#DLL:“RegAsm-tlb-codebase YourLibrary.DLL”

在Delphi中导入您的库(组件->导入组件,选择“类型库”,选择您的库,“创建单元”)

在Delphi中,使用C#库的方式与使用COM对象(例如OLE Automation或ActiveX)的方式相同


您可以为Delphi和C#之间的通信创建接口。如果您这样做,那么您就可以轻松实现Delphi中的代码和C#中的代码之间的双向通信。

我想使用一些默认组件,因为通信非常简单。您建议使用哪些组件(示例)?tcp客户端将在Delphi中,tcp服务器将在c#(或viceversa)中。@user193655在Delphi中,选择Indy组件。网上有很多例子。在C#中,请参见谷歌上的示例。像这样,起初我放弃了这个想法,不管怎样,这在一定程度上是有道理的。我的意思是一个想法是,对于数据部分,我使用db,但是为了有一个响应更快的应用程序,我需要更快的响应,我不能每2秒轮询db。所以可能我可以使用套接字来查看是否有需要轮询的内容,然后轮询数据。我没有得到C到D部分:因为C将没有UI,所以使用它的唯一方法是通过D。或者可能是你的Q中没有显示的其他触发器!!我把你告诉我的所有选项都提供给了另一个开发者,他选择了COM。顺便说一句,他会做所有的工作,我只会调用函数,所以我给了他选择。我没有说这可能是,但这两个应用程序运行在同一台机器上。谢谢大家。