powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Асинхронное выполнение метода СOM
3 сообщений из 3, страница 1 из 1
Асинхронное выполнение метода СOM
    #32536667
MLexa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, плиз, как мне выполнить метод 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
Асинхронное выполнение метода СOM
    #32537017
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например так

Код: 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
Асинхронное выполнение метода СOM
    #32537033
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а есть ошибочка
(void *)this
вместо ентого параметра ,передавай указатель m_myclass

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


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