15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Communication between OCX controls

Ravi Vaddepally -- ravirao@bellcore.com
Tuesday, January 23, 1996


In my application I use 2 OCX controls, created by using
CWnd::CreateControl method. 
my application requires these 2 OCX controls to talk to each other, like
one control invoking methods on the other and vice versa. 
One idea that came up in my mind is to get an interface pointer to
the OCX control that needs to be talked to and invoke that interface
methods. Well, the problem is - I don't have a clue as to how to do it.

Any suggestions ???

- Ravi
ravirao@mailee.bellcore.com

p.s: I am using VC++ 4.0 on NT.




paf Pete Ferreira
Wednesday, January 24, 1996

[Mini-digest: 2 responses]

> 
> In my application I use 2 OCX controls, created by using
> CWnd::CreateControl method. 
> my application requires these 2 OCX controls to talk to each other, like
> one control invoking methods on the other and vice versa. 
> One idea that came up in my mind is to get an interface pointer to
> the OCX control that needs to be talked to and invoke that interface
> methods. Well, the problem is - I don't have a clue as to how to do it.
> 
> Any suggestions ???
> 

an OCX can ask its container to list all the objects it contains
and thus get an interface pointer to the other OCX.

Pete
paf@netcom.com	http://www.webcom.com/paf/pete.html

-----From: nitink@sherpa.com

     Hi, Ravi:
     
     I assume that you have imported the controls into your project via 
     Component Gallery, declared variables for them, and then used 
     CWnd::CreateControl to actually create them.  If that's the case, then 
     your application already has variables for each control, and should be 
     able to supply a pointer to each control to the other one.
     
     If, instead, you are looking for an interface pointer to each one [say 
     because they don't know about each other's classes and want to 
     communicate via OLE Automation or some other interface], then you 
     could use the  "CWnd::GetControlUnknown()"  method on each of them to 
     get their interface pointers, and then pass those pointers to each 
     other as described above.
     
     Hope this helps.
     
     
     
     Nitin Karandikar
     
     nitink@sherpa.com



Dale Wilson -- dale@dra.com
Tuesday, January 30, 1996

[Mini-digest: 2 responses]

>> In my application I use 2 OCX controls, created by using
>> CWnd::CreateControl method.
>> my application requires these 2 OCX controls to talk to each other, like
>> one control invoking methods on the other and vice versa.
>> One idea that came up in my mind is to get an interface pointer to
>> the OCX control that needs to be talked to and invoke that interface
>> methods. Well, the problem is - I don't have a clue as to how to do it.
>>
>> Any suggestions ???
>>
>
>an OCX can ask its container to list all the objects it contains
>and thus get an interface pointer to the other OCX.
>
>Pete
>paf@netcom.com  http://www.webcom.com/paf/pete.html

Have you tried this, Pete?  I get a NOT IMPLEMENTED status when I attempt to 
enumerate my peer OCX's in VC/MFC generated containers (it's been a while 
since I gave up on this so I don't remember the exact technique I tried to 
find them.)

Dale Wilson
dale@dra.com
-----From: ravirao@bellcore.com (Ravi Vaddepally)


I posted a message on communication between OCX controls before and got
a couple of responses but neither of those exactly addressed my problem.

My problem in brief is as follows:

My application creates a window, calls a dll and passes the handle to
the window to it. Dll subclasses the window (passed to it) and displays
this on the application frame. This window has also the responsibility to
create an OCX using CWnd::CreateControl and display it in its client
area. The application creates separate instance of the above DLL for
each OCX control.

Now my question is how these controls can be made to communicate with 
each other ??

one solution may be is to get a dispatch interface (is this possible ?)
and invoke the methods but there is one potential ambiguity - what if 
there are a number of instances of an OCX control ? 

Any help is greatly appreciated.

-Ravi




paf Pete Ferreira
Wednesday, January 31, 1996

> 
> >> In my application I use 2 OCX controls, created by using
> >> CWnd::CreateControl method.
> >> my application requires these 2 OCX controls to talk to each other, like
> >> one control invoking methods on the other and vice versa.
> >> One idea that came up in my mind is to get an interface pointer to
> >> the OCX control that needs to be talked to and invoke that interface
> >> methods. Well, the problem is - I don't have a clue as to how to do it.
> >>
> >> Any suggestions ???
> >>
> >
> >an OCX can ask its container to list all the objects it contains
> >and thus get an interface pointer to the other OCX.
> >
> 
> Have you tried this, Pete?  I get a NOT IMPLEMENTED status when I attempt to 
> enumerate my peer OCX's in VC/MFC generated containers (it's been a while 
> since I gave up on this so I don't remember the exact technique I tried to 
> find them.)
> 

I haven't tried it with an MFC-based container.

According to "OLE Controls and Control Containers Guidelines, ver. 1.1"
all OLE containers must implement IOleContainer::EnumObjects, or they're
not OLE containers.

Pete
paf@netcom.com




Sridhar Rao Chedalla -- C.Sridhar@blr.sni.de
Wednesday, January 01, 1997

Hello ,
       
        Environment : VC++ 4.2-flat, Win NT 4.0

       I have developed two OCX controls. In the first control I exposed
one
method DisplayMessage() which takes no parameters and return void and I
have built type library file.

       Then I have created second OCX control and created one class
_DNAServer
from the type lib generated by the first OCX control. Then in the OCX
control I have taken this as a data member and in the OnLButtonDown of
the second OCX control I wrote the following code.

void CMyOCXCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
       COleControl::OnLButtonDown(nFlags, point);

       COleException e;

       // "ANCONTROL.ANControlCtrl.1" is the progid. of first control
       LPCTSTR str1 = _T("ANCONTROL.ANControlCtrl.1");

       if (!driver.CreateDispatch(str1, &e))
                       AfxMessageBox("Unable to create dispatch");

       ASSERT(driver.m_lpDispatch != NULL);

       driver.DisplayMessage();
       // When executed we get Catastrophic error.
}

       DisplayMessage() of the first control has no body but it simply
returns(I just want to test DisplayMessage() method). 

       When I run the two controls from MSVC OLE test container it is
giving
me error "Catastrophic Failure". I have debuggedd and found that I am
getting the error only when I call the DisplayMessage() function.  May I
know what is the problem in this.

	Thanks in Advance.


C.Sridhar



Sridhar Rao Chedalla -- C.Sridhar@blr.sni.de
Wednesday, January 01, 1997

Hello ,
       
        Environment : VC++ 4.2-flat, Win NT 4.0

       I have developed two OCX controls. In the first control I exposed
one
method DisplayMessage() which takes no parameters and return void and I
have built type library file.

       Then I have created second OCX control and created one class
_DNAServer
from the type lib generated by the first OCX control. Then in the OCX
control I have taken this as a data member and in the OnLButtonDown of
the second OCX control I wrote the following code.

void CMyOCXCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
       COleControl::OnLButtonDown(nFlags, point);

       COleException e;

       // "ANCONTROL.ANControlCtrl.1" is the progid. of first control
       LPCTSTR str1 = _T("ANCONTROL.ANControlCtrl.1");

       if (!driver.CreateDispatch(str1, &e))
                       AfxMessageBox("Unable to create dispatch");

       ASSERT(driver.m_lpDispatch != NULL);

       driver.DisplayMessage();
       // When executed we get Catastrophic error.
}

       DisplayMessage() of the first control has no body but it simply
returns(I just want to test DisplayMessage() method). 

       When I run the two controls from MSVC OLE test container it is
giving
me error "Catastrophic Failure". I have debuggedd and found that I am
getting the error only when I call the DisplayMessage() function.  May I
know what is the problem in this.


C.Sridhar




| Вернуться в корень Архива |