我面临的情况是我有两个不同的c ++项目:
第一个是VS2008插件:一个静态链接到MFC的DLL,我将把它合并到某个软件中。
第二个是C ++ Builder VCL程序:一个程序,它使用VCL创建了一个巨大的GUI。
我的任务是在第一个(插件)中加入第二个,这样一旦我在前面提到的软件中插入插件,我就可以启动第二个程序,使用它处理数据,并保存变化。所以我需要能够同时使用两个项目的方法和类......
在我一直在寻找合并VC ++和c ++构建器项目的方法后,我有点郁闷。兼容性问题是巨大的!尤其是MFC和VCL都涉及到我的案例。 从任何一方“迁移”对我来说似乎都是不可能的,尤其是我是微软系统编程的新手。如果有另一种选择,我会很高兴。
所以我要求你帮助开发人员,尤其是那些面临类似情况的人。我会很感激任何类型的答案。
随时问我任何问题以澄清这篇文章。
提前谢谢你!
答案 0 :(得分:1)
如果要与C ++类接口,请确保传递的数据只是基本的c ++类型,接口中不允许使用STL或MFC或VCL。
然后,您可以创建接口类的纯虚拟类,从纯虚拟类派生接口类。创建两个C函数,一个是new,它是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 * );
仅包含在VC端的MFC文件
class cInterface : public iInterface
{
public:
unsigned short __stdcall DoOneThing( char * );
long __stdcall DoTwoThing( char * );
private:
void WhatEver( void );
bool x;
}
答案 1 :(得分:0)
当您需要完全不同的运行时环境(如Basic和C ++或VCL和MFC)时,您需要定义所有模块都可以使用的接口。你不是第一个遇到这个问题的程序员。在Windows上运行数十年的一个选择是组件对象模型(COM)。
互联网上有很多COM Turtorials。