【问题标题】:How do I add some external executable to a Borland C++ Builder 2010 project?如何向 Borland C++ Builder 2010 项目添加一些外部可执行文件?
【发布时间】:2011-01-11 17:26:55
【问题描述】:

所以问题是如何向 c++ builder 2010 添加一些外部 .exe 文件?假设我在 Visual Basic 中制作了一些程序并拥有 exe 文件,因此不需要在 C++ 中制作相同的代码我只想在我的项目中包含该 exe?是否有可能使便携式应用程序成为一个 exe,其中包含另一个 exe 文件(可能在资源路径中)? 如果它是另一个exe中的一个exe,如何在代码中调用它?我知道通过系统函数调用它,或者通过将方向指向 exe 来调用它,但是如果它与主 exe 位于相同的地址上怎么办?

【问题讨论】:

  • 一般来说,您应该使用您要调用的代码创建一个 dll。但是请注意,从 VB 调用 C++ 代码比相反要简单得多。
  • Visual Basic的exe只是举例,主要是我不知道(或不想知道)exe中使用的功能,我只需要最终的执行结果,假设是汇编程序制作的exe,我只是想使用那个exe的功能,不想研究那个exe的源代码...
  • 然后使用WinApi的函数CreateProcess。它将句柄返回到衍生进程的标准输入和标准输出。您可以使用它们从程序的标准输出中读取所有数据。
  • @Raiv:不,它不会返回那个效果的句柄。您必须自己创建句柄。
  • 是的,但是在项目中的哪里加载或包含想要的 exe 文件,在资源上还是在哪里?

标签: c++ compiler-construction c++builder c++builder-2010


【解决方案1】:

我不完全了解您要完成的工作。如果您想使用给定程序的功能,您将必须了解该程序的工作原理。

如果您想获取给定的可执行文件,并像调用 shell 脚本一样调用它,那么您需要启动给定程序,并将其标准输入和标准输出重定向到管道。 An example of how to do that is available on MSDN。如果您希望能够只查看目标 EXE 中的 Visual Basic 类和方法,就像使用 Visual Basic .NET 一样,那么您就不走运了,因为任意可执行文件不理解类的概念或方法。

【讨论】:

    【解决方案2】:

    使用Project > Resources 对话框将 VB .exe 文件添加到您的项目并为其指定一个 ID。在运行时,您的 C++ 代码可以将该 ID 的资源数据提取到一个临时文件中,例如使用TResourceStreamTFileStream,然后使用CreateProcess() 运行它。使用完后不要忘记删除文件。

    否则,改为将 VB 代码重新写入 DLL,然后 C++ 应用程序可以在需要时简单地调用 DLL 的导出函数。如果你想发布一个独立的.exe(这通常不是DLL的使用方式),那么你将不得不使用相同的资源方法,只需使用LoadLibrary()GetProcAddress(),而不是CreateProcess(),动态访问 DLL 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      相关资源
      最近更新 更多