Click here to Skip to main content
15,912,507 members
Home / Discussions / COM
   

COM

 
GeneralRe: COM Pin
Michael P Butler12-Dec-01 0:15
Michael P Butler12-Dec-01 0:15 
GeneralFiring Event in Worker Thread Pin
Tim Rymer11-Dec-01 10:26
Tim Rymer11-Dec-01 10:26 
GeneralRe: Firing Event in Worker Thread Pin
Ernest Laurentin11-Dec-01 11:43
Ernest Laurentin11-Dec-01 11:43 
GeneralRe: Firing Event in Worker Thread Pin
Tim Rymer12-Dec-01 5:30
Tim Rymer12-Dec-01 5:30 
GeneralRe: Firing Event in Worker Thread Pin
Ernest Laurentin12-Dec-01 5:53
Ernest Laurentin12-Dec-01 5:53 
GeneralRe: Firing Event in Worker Thread Pin
Firoz11-Dec-01 19:30
Firoz11-Dec-01 19:30 
GeneralRe: Firing Event in Worker Thread Pin
Tim Rymer12-Dec-01 5:34
Tim Rymer12-Dec-01 5:34 
GeneralRe: Firing Event in Worker Thread Pin
Firoz13-Dec-01 2:22
Firoz13-Dec-01 2:22 
Hi Shabba,

Ooops..I forgot to mention that.

You are right, you need a Window.

The steps are very simple...
...some modifications to your CoClass.

For Creating the Window ...
^^^^^^^^^^^^^^^
1) #include <atlwin.h>

2) Derive your CoClass from CWindowImpl<Your CoClass Name> .

3) DECLARE_WND_CLASS("Your CoClass Name")

4) Implementation for FinalConstruct() and FinalRelease().
    In FinalConstruct(), you create the Window. and,
    In FinalRelease(), you destroy the Window.

For Handling UserDefined Thread messages ...
^^^^^^^^^^^^^^^^^^^^^^^^^^
5) The MessageMap macro...

BEGIN_MSG_MAP(Your CoClass)
MESSAGE_HANDLER(500, OnUserMessage)
END_MSG_MAP()

6) Implementation for OnUserMessage() handler function.
Now, inside this handler, you can fire your COM Event.

Thats it.

Now in your Worker ThreadProc, whenever you want to fire the event,
use PostMessage(...).

Note: Postmessage needs HWND.
You can do either of this...
1) use HWND_BROADCAST or
2) use the HWND returned when you created the Window (in FinalConstruct()).

eg. ::PostMessage(HWND_BROADCAST,500,0,0);




Firoz


The following sample code may be Helpful...

// LAWorkThr.h : Declaration of the CLAWorkThr

#ifndef __LAWORKTHR_H_
#define __LAWORKTHR_H_

#include "resource.h"       // main symbols
#include "LAWorkThreadExeCP.h"
  
#include <atlwin.h>	// Step-1
   
 /////////////////////////////////////////////////////////////////////////////
// CLAWorkThr
class ATL_NO_VTABLE CLAWorkThr : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CLAWorkThr, &CLSID_LAWorkThr>,
	public IConnectionPointContainerImpl<CLAWorkThr>,
	public IDispatchImpl<ILAWorkThr, &IID_ILAWorkThr, &LIBID_LAWORKTHREADEXELib>,	
	public CProxy_ILAWorkThrEvents< CLAWorkThr >,
  
	public CWindowImpl<CLAWorkThr> // Step-2
  
{
public:
	CLAWorkThr()
	{
	}

DECLARE_REGISTRY_RESOURCEID(IDR_LAWORKTHR)
DECLARE_NOT_AGGREGATABLE(CLAWorkThr)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CLAWorkThr)
	COM_INTERFACE_ENTRY(ILAWorkThr)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(IConnectionPointContainer)
	COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
END_COM_MAP()

BEGIN_CONNECTION_POINT_MAP(CLAWorkThr)
	CONNECTION_POINT_ENTRY(DIID__ILAWorkThrEvents)
END_CONNECTION_POINT_MAP()
  
// For Creating Window
  
DECLARE_WND_CLASS("CLAWorkThr")	// Step-3
  
// Step-4
  
HRESULT FinalConstruct()
{
	HWND hwnd = Create(::GetDesktopWindow(),CWindow::rcDefault,"MyAtlWindow",WS_POPUP);
	g_Myhwnd = hwnd;
	if (hwnd)
		return S_OK;
	else
		return HRESULT_FROM_WIN32(GetLastError());
}

void FinalRelease()
{
	if (m_hWnd != NULL)
	{		
		DestroyWindow();
	}
}
  
// The MessageMap
  
// Step-5
  
BEGIN_MSG_MAP(CLAWorkThr)
	MESSAGE_HANDLER(500, OnUserMessage)
END_MSG_MAP()	  
  
// Step-6

LRESULT OnUserMessage(UINT uMsg, WPARAM wpar, LPARAM lpar, BOOL& bHandled)
{
	Fire_MyEvent();
	return 0;
}
  
// ILAWorkThr
public:
	STDMETHOD(MyMethod)();
};

#endif //__LAWORKTHR_H_

GeneralRe: Firing Event in Worker Thread Pin
Ernest Laurentin13-Dec-01 5:27
Ernest Laurentin13-Dec-01 5:27 
GeneralOutlook automation Pin
JDMoore11-Dec-01 4:15
JDMoore11-Dec-01 4:15 
QuestionHow to add toolband to my application. (How IE does for itself?) Pin
koteswara10-Dec-01 19:30
koteswara10-Dec-01 19:30 
QuestionImplementing sink interface in raw C++? Pin
Henrik Husted8-Dec-01 18:31
Henrik Husted8-Dec-01 18:31 
AnswerRe: Implementing sink interface in raw C++? Pin
Aaron Schaefer9-Dec-01 11:11
Aaron Schaefer9-Dec-01 11:11 
GeneralActiveX Pin
mazy4-Dec-01 2:57
mazy4-Dec-01 2:57 
GeneralDllSurrogate problems Pin
Avneesh Bhatnagar3-Dec-01 18:38
Avneesh Bhatnagar3-Dec-01 18:38 
GeneralRe: DllSurrogate problems Pin
Joao Morais5-Jan-02 0:36
Joao Morais5-Jan-02 0:36 
GeneralQueryInterface( ..., void** ppv) Pin
3-Dec-01 9:26
suss3-Dec-01 9:26 
GeneralRe: QueryInterface( ..., void** ppv) Pin
Bill Wilson3-Dec-01 10:45
Bill Wilson3-Dec-01 10:45 
GeneralRe: QueryInterface( ..., void** ppv) Pin
Shadi Al-Kahwaji9-Dec-01 22:41
Shadi Al-Kahwaji9-Dec-01 22:41 
GeneralAutomatisation question - need hint Pin
Harald Krause2-Dec-01 6:25
Harald Krause2-Dec-01 6:25 
GeneralRe: Automatisation question - need hint Pin
David Stranz3-Dec-01 6:53
David Stranz3-Dec-01 6:53 
Generalpassing connection points parameters by ref Pin
SPENNER1-Dec-01 8:38
SPENNER1-Dec-01 8:38 
GeneralRe: passing connection points parameters by ref Pin
Anders Molin1-Dec-01 10:56
professionalAnders Molin1-Dec-01 10:56 
GeneralRe: passing connection points parameters by ref Pin
SPENNER1-Dec-01 11:38
SPENNER1-Dec-01 11:38 
GeneralRe: passing connection points parameters by ref Pin
Anders Molin1-Dec-01 12:50
professionalAnders Molin1-Dec-01 12:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.