Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

How to create COM sink using MFC?

Posted on 2008-06-21
4
838 Views
Last Modified: 2013-11-26
Hello,

I am having difficulties implementing a sink for a COM object dispatch interface. This is an MFC console application, so using wizards to add CCmdTarget automation is not an option.

I am not having any issues with using other interfaces (calling from my app into the COM object). It is the sink where I am running into a snag (from _Notify).

Here is a snippet of the TLH file, for which I need to implement the sink:
struct __declspec(uuid("2e21b3ec-f00f-f00f-8973-46d109c82f47"))  _TheLib;
struct __declspec(uuid("C3520671-f00f-f00f-9b96-0060083968AE")) _Notify;

TLI file for the interface of interest:
inline HRESULT _Notify::OnNotifyMsg ( )
{
    HRESULT _result = 0;
    _com_dispatch_method(this, 0x2, DISPATCH_METHOD, VT_ERROR, (void*)&_result, NULL);
    return _result;
}

Here is the IDL:
library TheLib
{
    // TLib :     // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");

    // Forward declare all types defined in this typelib
    dispinterface _Notify;
    [
      uuid(C3520671-F00F-F00F-9B96-0060083968AE),
      helpstring("_Notifyinterface")
    ]

    dispinterface _Notify{
        properties:
        methods:
            [id(0x00000002)]
            HRESULT OnNotifyMsg();
    };
};

I've generated the  IDispatch wrapper class using the Add Class from Typelib Wizard. I've then attempted to inherit and extend the method which I am interested in - but the sink never receives any events.

I would greatly appreciate help with this. I've tried many different ways of doing this, and have looked through other posts about this subject on Experts Exchange - without too much help.

Thanks everyone!

NotLogical
0
Comment
Question by:NotLogical
  • 2
4 Comments
 
LVL 49

Assisted Solution

by:DanRollins
DanRollins earned 150 total points
ID: 21842176
THis codeproject article should provide some clues.
   Handling COM Events in a Console Application
   http://www.codeproject.com/KB/COM/xyevent.aspx
0
 
LVL 8

Author Comment

by:NotLogical
ID: 21842265
Dan,

The article you offered is quite interesting, although the XYDispDriver class which is discussed only connects one COM object's dispatcher to another one. This is done in a console application, but it unfortunately does not create a sink within said console application.

Thanks,

NotLogical
0
 
LVL 19

Assisted Solution

by:alb66
alb66 earned 150 total points
ID: 21864592
0
 
LVL 8

Accepted Solution

by:
NotLogical earned 0 total points
ID: 21871034
Thank you for your help... I think this will work!
0

Featured Post

Networking for the Cloud Era

Join Microsoft and Riverbed for a discussion and demonstration of enhancements to SteelConnect:
-One-click orchestration and cloud connectivity in Azure environments
-Tight integration of SD-WAN and WAN optimization capabilities
-Scalability and resiliency equal to a data center

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question