dcsimg

IPC Using Connection Points and EventSinks

WEBINAR:
On-Demand

Application Security Testing: An Integral Part of DevOps


As a programmer I often find a need for an IPC(Inter-Process Communication) Mechanism for interacting between serveral processes. I like using COM and OLE since interfaces are simplified, and interaction between components becomes easy. Most IPC techniques requires marshalling, prameters descriptors, and enormous overhead on the design and testing processes. the ATL environment supply a suitable framework for COM Events dispatching with default marshling.

To generate a simple OLE Server that expose an interface to be connected from multiple clients follow these steps:

OLE Server

  1. Start a new ATL project selecting the SERVER - Executable (EXE)
  2. A new skeleton was created. select "Insert/New ATL Object" from the 'Insert' Menu and specify the parameters for the interface you want to create , don't forget to check the 'Support Connection Points' checkbox. it is recommended to check the marshlink checkbox and even to create a custom marshler if all you need is Local IPC.
  3. Select other options depended on your project and generate the interface code.
  4. Add methods/properties to your exposed interface.
  5. On the dispinterface(EventSink) add methods for the events to be passed to the calling process.
  6. Now as you can see in your interface generated header file your interface inheret from ConnectionPointContainerImpl<> to support connction points you must implement a proxy that uses the dispinterface discussed earlier. ATL Framework can do it for by simply right-clicking on the Interface implementation file and choosing implement connection point.
  7. A propery page will appear asking you to select header filename and interface to implement select the appropriate and click OK.
  8. Now from the exposed interface you can use the Fire_"EventName" to call the caller application with parameters.

The Client

  1. Start a new project (Win32,MFC,or whatever you wish)
  2. Import the IDL. you can use the #import directive to generate .tlh,.tli files .
  3. Now implement the dispinterface (The EventSink) using a class derived from the IDispatch + Invoke method and Query Interface.
  4. To 'install' the event sink you must use an instance of the exposed interface , use QueryInterface to get the IConnectionPointContainer from it, after an object of this type was retrieved use FindConnectionPoint to get the IConnectionPoint object and Advise method to connect the EventSink.

The Demo Project

The sample project was created on MSDEV 6sp4 tested on Win2k Proffesional Edition. It consist of OLEServerSampler.exe that expose the IDoInterProcConnections interface and the _IDoInterProcConnectionsEvents sink. and HelloSampler.exe a console application that implement an EventSink and connect to the OLEServerSampler Process.

Downloads

Download demo project - 224 Kb


Comments

  • There are no comments yet. Be the first to comment!

  • You must have javascript enabled in order to post comments.

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Hybrid IT consists of both cloud and on-premises data center infrastructure. This book helps you understand both sides of the hybrid IT equation and how HPE can help your organization transform its IT operations and save time and money in the process. I delve into the worlds of security, economics, and operations to show you new ways to support your business workloads.

  • IDC estimates that more than 70% of organizations have a cloud-first application deployment strategy to align with digital transformation initiatives. As such, many organizations are transitioning to Microsoft Office 365 and utilizing public clouds such as Microsoft Azure. However, IT leaders are discovering that default data protection schemes are not as robust as they desire. As a result, many are turning to Veeam® to provide the necessary data management and protection policies demanded by the …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.