使用 COM 适合我吗?
Posted
技术标签:
【中文标题】使用 COM 适合我吗?【英文标题】:Is using COM right for me? 【发布时间】:2011-10-03 18:16:27 【问题描述】:我的工作有一个用 VB6 编写的应用程序。我的任务是用 C# .NET 编写另一个不同的应用程序。我不允许更改 VB6 代码,但每次在 VB6 应用程序中调用特定函数时,我都需要调用一个函数(从我的 .NET 应用程序)。
我的老板建议使用 COM 或 DCOM 来完成这项任务。我对这两个主题都不熟悉,并且很难找到我可以轻松理解且与我的任务相关的教程。
我可以使用 COM 执行此操作还是必须修改现有的 VB6 代码?
【问题讨论】:
不清楚。道路是:VB6 调用 C# 调用某些东西或 C# 调用 VB6 或其他东西......而“我需要调用一个函数”......它是哪种语言? 除非 VB6 代码已经是一个 com 对象,即组件,否则我认为您将不得不以某种方式进行修改。要么将其作为 com 对象公开,要么将其调用作为 com 对象公开的 .Net 代码。 为简单起见,如果两个应用程序在同一台机器上运行,您可以使用 DDE,这种方法有点过时,但非常简单。 【参考方案1】:您需要在 VB6 中将函数公开为 COM (ActiveX DLL)。这是直截了当的。 http://vb-helper.com/howto_activex_dll.html
调用 COM 对象也很容易。 http://www.c-sharpcorner.com/UploadFile/psingh/CallingCOMComponentFromCSharp12022005231615PM/CallingCOMComponentFromCSharp.aspx
【讨论】:
【参考方案2】:在我看来,您有一个不应更改其源代码的 VB6 应用程序。现在每次调用 VB6 应用程序中的方法时,您还希望调用另一个组件 (C#) 中的方法。
以上是假设,因为您的问题不是 100% 清楚。
如果是这种情况并且您无法更改 VB6 应用程序,那么您可能可以使用COM Channel Hooks 做一些事情(假设 VB6 应用程序由 COM 对象组成)。
但这将使用 C++ 和低级 COM,这可能是您不想做的事情。
【讨论】:
【参考方案3】:我认为您问的是从 VB6 应用程序 中调用 C# 应用程序 中的方法。所以我们谈论的是某种形式的进程间通信(因此是关于 DCOM 的评论)。
我使用 .NET Remoting 来替换某些应用程序中的 DCOM,方法是创建一个可调用 COM 的 .NET 库来充当客户端,远程处理对象托管在 .NET 应用程序中。您的 VB6 应用程序使用对象,方法在服务器上执行。
但是您将不得不修改您的 VB6 应用程序,至少稍微修改一下,以将新调用注入到您的 .NET。您能否更清楚地了解不更改 VB6 应用程序的要求?
【讨论】:
以上是关于使用 COM 适合我吗?的主要内容,如果未能解决你的问题,请参考以下文章