【问题标题】:Merging a vc++ and a c++ builder project合并 vc++ 和 c++ 构建器项目
【发布时间】:2014-01-13 15:41:11
【问题描述】:

我面临的情况是我有两个不同的 c++ 项目:

  • 第一个是 VS2008 插件:一个静态链接到 MFC 的 DLL,我将把它合并到某个软件中。

  • 第二个是 C++ Builder VCL 程序:具有使用 VCL 制作的巨大 GUI 的程序。

我的任务是将第二个程序合并到第一个程序(插件)中,这样一旦我在我之前提到的软件中为插件充电,我就可以启动第二个程序,使用它处理数据,并保存变化。所以我需要能够同时使用两个项目中的方法和类......

在我一直在寻找一种方法来合并一个 VC++ 和一个 c++ builder 项目之后,我有点沮丧。兼容性问题是巨大的!特别是 MFC 和 VCL 都涉及我的案例。 从任何一方“迁移”对我来说似乎是不可能的,尤其是我是在 Microsoft 系统上编程的新手。因此,如果有替代方案,我会很高兴。

因此,我请求您帮助开发人员,尤其是那些面临类似情况的开发人员。我将不胜感激任何类型的答案。

请随时问我任何问题以澄清这篇文章。

提前谢谢你!

【问题讨论】:

  • 我的建议是将两个代码库分开,并将 C++ Builder 部分也变成一个 dll(这样你最终会得到两个 dll)——然后只需调用 C++ Builder 上的函数来自您的 VS2008 插件 dll 的 dll
  • 谢谢你的回答我会试试看。

标签: c++ visual-c++ mfc c++builder vcl


【解决方案1】:

如果您与 C++ 类交互,请确保传递的数据只是基本的 C++ 类型,接口中不允许使用 STL 或 MFC 或 VCL。

然后,可以创建接口类的纯虚类,从纯虚类派生接口类。创建两个 C 函数,一个是新的 MFC 类但返回接口类,另一个是从接口指针中删除但实际上删除它后面的 MFC 类。

作为示例 .h 文件的一个简单示例(只是在此处进行,未经测试)。这是因为两个编译器之间的虚拟接口相同。我非常一致地反向执行(在 C++Builder 中编写代码,可以在用 VC6 编写的古老 MFC 应用程序中使用)。

接口文件(包含在 C++ Builder 代码和 MFC 代码中)

class iInterface
{
   public:
      virtual unsigned short __stdcall DoOneThing( char * ) = 0;
      virtual long __stdcall DoTwoThing( char * ) = 0;
}

iInterface * __stdcall NewcInterface();
void __stdcall DeletecInterface( iInterface * );

MFC 文件只包含在 VC 端

class cInterface : public iInterface
{
   public:
      unsigned short __stdcall  DoOneThing( char * );
      long __stdcall  DoTwoThing( char * );

   private:
      void WhatEver( void );

      bool x;
}

【讨论】:

    【解决方案2】:

    当您需要完全不同的运行时环境(如 Basic 和 C++ 或 VCL 和 MFC)时,您需要定义一个所有模块都可以使用的接口。你不是第一个遇到这个问题的程序员。在 Windows 上使用了几十年的一种选择是组件对象模型 (COM)。

    网上有很多COM Turtorials

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      相关资源
      最近更新 更多