Solved

How to create COM sink using MFC?

Posted on 2008-06-21
4
828 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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
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.
This video gives you a great overview about bandwidth monitoring with SNMP and WMI with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're looking for how to monitor bandwidth using netflow or packet s…

705 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now