【问题标题】:VS2010 Multiproject Solution - Console and Form ApplicationVS2010 多项目解决方案 - 控制台和表单应用
【发布时间】:2012-03-28 23:48:46
【问题描述】:

我有一个 VS2005 解决方案项目,它由两个依赖项目组成。这个项目是一个 C 控制台应用程序,它与设备通信并从中获取一些输出。这个项目是一个老项目,不是我写的。我是一名电气电子工程师,主要使用 C 语言进行项目。我不太了解 C++ 和 C#。有一段时间我正在处理 VS2010 和 c++ 表单应用程序。我掌握了基础知识,但我遇到了一些问题。我想为这个控制台项目添加 gui。为此,我设计了一个表单应用程序。我有按钮可以在控制台应用程序中启动进程,而 RichTextbox 用于输出。

我必须通过单击按钮从 winform 应用程序调用控制台项目内的函数。我想在循环中调用该函数以进行连续读数。

我尝试调用“console.exe”文件并在我的 winform 项目中运行它并将输出重定向到richtextbox,但它对我的项目来说太慢了。我必须从我的设备上持续快速阅读。

最好的方法是什么?我想将我的 C 控制台应用程序转换为 Windows 窗体应用程序。

谢谢。

【问题讨论】:

    标签: c winforms visual-studio-2010 visual-c++


    【解决方案1】:

    您不能直接从另一个 EXE 调用 EXE 内部的函数。

    您有多种选择,具体取决于您愿意做多少工作以及旧项目的长期目标是什么。

    1. 只需将控制台项目中的相关代码复制到表单项目中即可;如果您的控制台项目已过时并且您不再计划支持它,则此方法效果最佳。

    2. 将控制台项目中的相关代码移动到库 (DLL) 项目中,并从控制台和表单应用程序中引用它;如果您的控制台项目中的代码相对独立(例如,您没有很多全局变量等),则此方法有效。

    3. 为您的控制台项目添加某种 IPC 机制(侦听 TCP 套接字或命名管道等),您可以从表单项目连接到该机制并直接获取数据;这与您最初的目标“从另一个 EXE 调用一个 EXE 中的函数”非常接近,但工作量要大得多。

    【讨论】:

    • 感谢您的回答。控制台项目现在已过时。我们不需要它。我有控制台应用程序的源代码。我不会在 EXE 中调用函数。我想使用源将其转换为 winform 应用程序。我会尝试你的建议。
    【解决方案2】:

    由于 C 是 C++ 的子集,您应该能够将 CLR 程序中的 C 源代码编译到您的 C++ 项目中,将其用作可以直接从 gui 调用的库。 Check out this question for how to get started on doing this.

    您应该能够几乎完全按照以前使用的方式使用 C 代码,尽管它很可能需要进行一些调整。 Here's another related stack overflow question.

    【讨论】:

      【解决方案3】:

      通常,您会将现有逻辑从控制台应用程序移动或转换为类库项目。然后你会在你的表单项目中包含一个对这个类库的引用。接下来在您的表单项目中,您从另一个线程调用您的库方法(例如,当您按下按钮时),以免阻塞您的 UI 线程。联系我们!使用结果更新 RichTextBox 时,您必须调用 Invoke 方法来执行跨线程操作(有关相关主题,请参阅 here)。

      【讨论】:

      • 我对类库了解不多。我之前没有写过类库。我的 C 源项目有很多“.h 标头”要包括在内。我应该将它们包含在外部“C”结构中吗?我会试试你的建议。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多