Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 378
  • Last Modified:

How to comunicate between zwo ActiveX Controls

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
Hugi
Asked:
Hugi
1 Solution
 
Tommy HuiEngineerCommented:
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
 
HugiAuthor Commented:
But how can I get the pointer to the moniker on the Object (Parameter i need for calling GetObject)
0
 
HugiAuthor Commented:
But how can I get the pointer to the moniker on the Object (Parameter i need for calling GetObject)
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
HugiAuthor Commented:
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
 
chensuCommented:
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
 
chensuCommented:
0
 
HugiAuthor Commented:
I think, the anser of thui was better, but I don't know how to implement.
0
 
HugiAuthor Commented:
Question specification: I need informations about using the IRunningObjectTable (Register, GetObject and how to get the pointer to the Moniker)
0
 
ERGOCommented:
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
 
HugiAuthor Commented:
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

Tackle projects and never again get stuck behind a technical roadblock.
Join Now