Гость
Форумы / C++ [игнор отключен] [закрыт для гостей] / VC: обработка событий ADO / 2 сообщений из 2, страница 1 из 1
25.03.2003, 06:03
    #32126155
Merl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VC: обработка событий ADO
Здравствуйте.

Есть необходимость обрабатывать некоторые события от ADO. Реализовывать это надо, насколько я понимаю, с использованием того, что MSDN называет Connectable Objects. Согласно этого написал sink-объект (текс приведен ниже), установил соединение (текст тоже ниже), вроде все окей, но когда должно возникнуть событие, компилятор сообщает об ошибке: Access violation.
В чем может быть причина?

Установка соединения
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IConnectionPoint *pCPAdoRS;
CAdoSink Sink;         
DWORD dwAdoCookie;

// 00000266 - 0000 - 0010 - 8000 -00AA006D2EA4
static const GUID IID_RecordsetEvents = 
{0x00000266,0x0000,0x0010,{0x80,0x0,0x0,0xaa,0x0,0x6d,0x2e,0xa4}};
HRESULT hr; 
IConnectionPointContainer *pCPCtrAdoRS=NULL;

hr = adoRS.m_lpDispatch->QueryInterface(IID_IConnectionPointContainer,(void **)&pCPCtrAdoRS);
hr = pCPCtrAdoRS->FindConnectionPoint(IID_RecordsetEvents, &pCPAdoRS);
hr = pCPAdoRS->Advise(&Sink, &dwAdoCookie);


Реализация sink-объекта
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
class CAdoSink : public IDispatch
{
public:
ULONG refCount;

CAdoSink::CAdoSink() {
   refCount =  1 ;
}
CAdoSink::~CAdoSink() {
}



// IUnknown methods.
virtual HRESULT __stdcall QueryInterface(REFIID riid, void **ppvObject)
{
	static const GUID IID_RecordsetEvents = 
	{0x00000403,0x0000,0x0010,{0x80,0x0,0x0,0xaa,0x0,0x6d,0x2e,0xa4}};

	if(IsEqualGUID(riid, IID_IDispatch) || IsEqualGUID(riid, IID_IUnknown) || IsEqualGUID(riid, IID_RecordsetEvents))
	{
		this->AddRef();
		*ppvObject = this;
		return S_OK;
	}
	*ppvObject = NULL;
	return E_NOINTERFACE;
}

virtual ULONG _stdcall AddRef(void) {
   return ++refCount;
}

virtual ULONG _stdcall Release(void) {
   if( --refCount <= 0) {
 
      //Delete this;
      return  0 ;
   }
   return refCount;
}

// IDispatch methods.
virtual HRESULT _stdcall GetTypeInfoCount(UINT *pctinfo) {
   if(pctinfo) *pctinfo =  0 ;
   return E_NOTIMPL;
}

virtual HRESULT _stdcall GetTypeInfo(
      UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) {
   return E_NOTIMPL;
}

virtual HRESULT _stdcall GetIDsOfNames(
      REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid,
      DISPID *rgDispId) {
   return E_NOTIMPL;
}

virtual HRESULT _stdcall Invoke(
      DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
      DISPPARAMS *pDispParams, VARIANT *pVarResult,
      EXCEPINFO *pExcepInfo, UINT *puArgErr) 
{
// сами обработчики здесь не приведены, т.к. до сюда делов вообще не доходит
   return S_OK;
}

};
...
Рейтинг: 0 / 0
01.04.2003, 10:06
    #32130659
VC: обработка событий ADO
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / VC: обработка событий ADO / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]