Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Асинхронное выполнение метода СOM / 3 сообщений из 3, страница 1 из 1
27.05.2004, 13:45
    #32536667
MLexa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное выполнение метода СOM
Подскажите, плиз, как мне выполнить метод COM объекта асинхронно.
Счас схема выполнения примерно такая :
#import "comdllex.tlb" rename_namespace("VFPLib311")

#define p(i) parm->p[(i)].val

void FAR RunComVFP(ParamBlk FAR *parm)
{
IDispatch* _vfpptr = (IDispatch*)p(0).ev_long ;
using namespace VFPLib311;
CoInitialize(0);
VFPLib311::ItestPtr m_myclass = (VFPLib311::ItestPtr)_vfpptr;
_variant_t vresult;
vresult = m_myclass->RunTest();
CoUninitialize();
}

IDispatch передаю из другой проги. Все это работает , но метод RunTest() выполняется слишком долго. Как бы мне его асинхронно запустить? Компонента чей метод выполняется прдставляет из себя СOM EXE. Может в поток пихнуть, тогда как ?
...
Рейтинг: 0 / 0
27.05.2004, 15:47
    #32537017
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное выполнение метода СOM
Ну например так

Код: 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.
#import "comdllex.tlb" rename_namespace("VFPLib311")
#define p(i) parm->p[(i)].val

void _USERENTRY Thread(LPVOID lpParameter)
{
   CoInitialize( 0 );
   VFPLib311::ItestPtr * m_class = (VFPLib311::ItestPtr*)lpParameter;
   ... 
   m_class->RunTest();
   ...
   CoUninitialize ();
}

void FAR RunComVFP(ParamBlk FAR *parm) 
{
  IDispatch* _vfpptr = (IDispatch*)p( 0 ).ev_long ; 
  using namespace VFPLib311;
  CoInitialize( 0 );
  VFPLib311::ItestPtr m_myclass = (VFPLib311::ItestPtr)_vfpptr;
 //  _variant_t vresult; 
 //  vresult = m_myclass->RunTest();

   DWORD tid;
   HANDLE hThrd;
     if((hThrd = CreateThread( 0 , 0 ,(LPTHREAD_START_ROUTINE)Thread,(void *)this, 0 ,&tid)) == NULL)
         {
            hres = - 1 ;
         }
   CloseHandle(hThrd);
   CoUninitialize();
}



 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
27.05.2004, 15:52
    #32537033
JibSkeart
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Асинхронное выполнение метода СOM
а есть ошибочка
(void *)this
вместо ентого параметра ,передавай указатель m_myclass

 ш
(';')
(V),(V),,
Код: plaintext
 JS 
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Асинхронное выполнение метода СOM / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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