Question

I am facing a situation where I have two different c++ projects :

  • The first one is a VS2008 plugin : a DLL statically linked to MFC which I will incorporate to a certain software.

  • The second one is a C++ Builder VCL program : A program which has a huge GUI made using the VCL.

My mission is to incorporate the second one in the first (the plugin) so that once I charge the plugin in the software I mentioned before, I would be able to launch that second program, process data using it, and save the changes. so I need to be able to use methods and classes from both projects together ...

I got a little depressed after I've been searching for a way to merge a VC++ and a c++ builder project. The compatibility issues are enormous ! especially that both MFC and VCL are involved in my case. "migrating" from either sides seems impossible to me, especially that I'm new to programming on a Microsoft system. So I would be happy if there was an alternative.

So I'm asking you for your help fellow developpers, especially those who have faced a similar situation. I would be grateful for any type of answer.

Feel free to ask me any questions to clearify this post.

And thank you in advance !

Was it helpful?

Solution

If you are interfacing with C++ classes, make sure that the data passed are only basic c++ types, no STL or MFC or VCL allowed in the interface.

Then, you can create a pure virtual class of the interface class, derive the interface class from the pure virtual class. Create two C functions, one that new's the MFC class but returns the interface class and one that delete from the interface pointer but actually deletes the MFC class behind it.

As a quick example (just whipped up here, not tested) of the sample .h file. This works by virtue of the virtual interface being the same between the two compilers. I do it very consistently in reverse (write code in C++Builder that can be used in an ancient MFC application written in VC6).

Interface file (included in the C++ Builder code and MFC code)

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

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

MFC file included in VC side only

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

   private:
      void WhatEver( void );

      bool x;
}

OTHER TIPS

When you have to completely different run-time environment like Basic and C++ or VCL and MFC you need to define an interface that all modules can use. You're not the first programmer that hits this problem. One choice that works for decades on Windows is the Component Object Model (COM).

There are a lot of COM Turtorials in the Internet.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top