template <class T>
COMModel<T>::COMModel(CLSID iidCOMModel): 
		pConnectionPoint(0), pointer_tovalue(0) {
	COMModelCreator ModelCreator;
	IUnknown* model(ModelCreator.CreateModel(iidCOMModel));
	assert(model);
	model->QueryInterface(iidCOMModel,(void**) &pointer_tovalue);

	// Create a ModelSink to which COM models can fire events.
	// The sink is provided with a CallBack pointer it uses to pass
	// the events on to View<T>.
	ModelNotifySink<T>* pNotifySink(new ModelNotifySink<T>(this));

	// Get the ICOMModel interface pointer.
	ICOMModel* pCOMModel;

	if (SUCCEEDED(pointer_tovalue->QueryInterface(IID_ICOMModel, (void**)&pCOMModel))) {
		if (SUCCEEDED(pCOMModel->FindConnectionPoint(IID_IModelNotifySink, &pConnectionPoint))) {
			if (FAILED(pConnectionPoint->Advise(pNotifySink,&ConnectionKey)))
				ConnectionKey = 0;
		}
	 	pCOMModel->Release();
	}
}