Solved

How to comunicate between zwo ActiveX Controls

Posted on 1998-06-19
10
366 Views
Last Modified: 2013-12-03
I start the IE4 by using IWebBrowser Interface from my Application witch is an ActiveX. The WebBrowser contains an ActiveX Object witch has to communicate with my Application. How can I do that? (Please give me an example)
0
Comment
Question by:Hugi
10 Comments
 
LVL 15

Expert Comment

by:Tommy Hui
ID: 1408196
For any object that needs to communicate with another, the best way to do that is to register itself with the IROT (IRunningObjectTable). Then other objects can detect if you're there or not by calling IRunningObjectTable::GetObjet().

One you have the interface, you can query it for any other interfaces you have defined for that communication.
0
 

Author Comment

by:Hugi
ID: 1408197
But how can I get the pointer to the moniker on the Object (Parameter i need for calling GetObject)
0
 

Author Comment

by:Hugi
ID: 1408198
But how can I get the pointer to the moniker on the Object (Parameter i need for calling GetObject)
0
 

Author Comment

by:Hugi
ID: 1408199
Message to thui: Sorry, I'm a new user of this tool. Your anser was not bad but I need an example, how to implement. Maybe it was wrong to open the question for other users...
0
 
LVL 23

Expert Comment

by:chensu
ID: 1408200
The following content is from

ActiveX SDK FAQ
Frequently Asked Questions on Developing with the ActiveX SDK
Last updated: October 16, 1996




How do I access IE's object model from a contained control?

IE supports an Automation interface called IWebBrowserApp. It also supports an object model for scripting through a hierarchy of interfaces, the root of which is IHTMLDocument. The IHTMLDocument interface has one property, Script, which returns the dispinterface for the IOmWindow interface. This corresponds to the window object described in the ActiveX SDK documentation. From a contained control or doc object, you can get the dispinterface for IWebBrowserApp with the following code:


IOleClientSite* pClientSite; // already points to the control's client site
IServiceProvider* pISP;
IDispatch* pIEIDisp;


pClientSite->QueryInterface(IID_IServiceProvider, (void **)&pISP);
pISP->QueryService(IID_IWebBrowserApp, IID_IDispatch, (void **)&pIEIDisp);


To get the dispinterface for IHTMLDocument, given that you already have the ISP pointer as above, you can use this code:


IDispatch* pScriptIEDisp;
pISP->QueryService(SID_SContainerDispatch, IID_IDispatch, (void**)&pScriptIEDisp);

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 23

Expert Comment

by:chensu
ID: 1408201
0
 

Author Comment

by:Hugi
ID: 1408202
I think, the anser of thui was better, but I don't know how to implement.
0
 

Author Comment

by:Hugi
ID: 1408203
Question specification: I need informations about using the IRunningObjectTable (Register, GetObject and how to get the pointer to the Moniker)
0
 

Accepted Solution

by:
ERGO earned 200 total points
ID: 1408204
Try this:
void CConnectCtrl::Connect()
{
      LPRUNNINGOBJECTTABLE lpRot;
      LPENUMMONIKER lpEnumMoniker;
      LPMONIKER lpRunningMoniker;      
      LPUNKNOWN lpUnk;
      DWORD dwCookie;

      GetRunningObjectTable(NULL, &lpRot);
      lpRot->EnumRunning(&lpEnumMoniker);

      while(lpEnumMoniker->Next(1, &lpRunningMoniker, NULL) == S_OK)
      {
            if(SUCCEEDED(lpRot->GetObject(lpRunningMoniker, &lpUnk)))
            {
                  LPCONNECTIONPOINTCONTAINER lpConnPtCont;

                  // Is this object a connection point container?
                  if (SUCCEEDED(lpUnk->QueryInterface(IID_IConnectionPointContainer,
                              (LPVOID*)&lpConnPtCont)))
                  {
                        ASSERT(lpConnPtCont != NULL);
                        LPCONNECTIONPOINT lpConnPt = NULL;
                        
                        // We implement IID_IEventNotify.  Is this the interface that the
                        // connection point is looking for?
                        if (SUCCEEDED(lpConnPtCont->FindConnectionPoint(IID_IEventNotify, &lpConnPt)))
                        {
                              LPUNKNOWN lpUnk2;
                              HRESULT hr;
                              lpUnk2=m_Event.GetInterface(&IID_IUnknown);
                              hr=lpConnPt->Advise(lpUnk2,&dwCookie);
                              lpUnk2->Release();
                        }
                        lpConnPtCont->Release();
                  }
                  lpUnk->Release();
            }
            lpRunningMoniker->Release();
      }
      lpEnumMoniker->Release();
      lpRot->Release();
      m_eventMessage = "ConnectionDone";
}

m_Event is a member variable of type of your Dispatch Interface class.
0
 

Author Comment

by:Hugi
ID: 1408205
Thanks
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

This article shows how to make a Windows 7 gadget that accepts files dropped from the Windows Explorer.  It also illustrates how to give your gadget a non-rectangular shape and how to add some nifty visual effects to text displayed in a your gadget.…
This article describes a technique for converting RTF (Rich Text Format) data to HTML and provides C++ source that does it all in just a few lines of code. Although RTF is coming to be considered a "legacy" format, it is still in common use... po…
The purpose of this video is to demonstrate how to set up the WordPress backend so that each page automatically generates a Mailchimp signup form in the sidebar. This will be demonstrated using a Windows 8 PC. Tools Used are Photoshop, Awesome…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

867 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

21 Experts available now in Live!

Get 1:1 Help Now