Yes, you can create one Singleton COM (no need for it to be ActiveX) object to serve as a mechanism for sending messages from one application to the other. But it will require more effort than using some other standard inter-process communications infrastructures already available in Windows/.Net.
Here (
MSDN[
^]) are listed some of them. It also requires some effort to implement, but .Net Remoting also serves the purpose and implements a mechanism which allows you to 'abstract' yourself from the exact 'location' of the objects (can be in the same or different AppDomain or even in different computers). If looking for something more evolved you can take a look at WCF, you can find a tutorial about it in
WCF: From a Beginner's perspective & a Tutorial[
^] and here
From .NET Remoting to the Windows Communication Foundation (WCF)[
^].
Edit: Now, from your comments and edit. Create one shared library (DLL) and put there all classes needed for edition and previsualization, now that functionality can be referenced and used from both applications (prog1, prog2).
--V.Lorz