ActiveX написанный на с++ atl, используемый в IE.
Через js передается параметр и calback на функцию:
function pAllert(i){
alert(i);
}
function getReportInfo(){
var d = document.getElementById("activex");
var t = document.getElementById("text").value;
d.Get(t, pAllert);
}
Когда все было однопоточным все хорошо работало, т.е. вызывал Get, ActiveX отрабатывал, вызывал pAllert и выходил из.
Потом решил сделать обоботку в отдельном потоке и вызывать callback от туда по завершению потока.
примерно так выгдлядит класс в котором стартую поток:
void Thread::StartThread(string param, VARIANT callbackf)
{
_param = param;
_callbackf = callbackf;
int Thread::Run()
{
/*
тут функциональность метода
*/
CComDispatchDriver pObj = V_DISPATCH(&_callbackf);
CComVariant param = result.c_str();
HRESULT res = pObj.Invoke1((DISPID)DISPID_VALUE,¶m);
return 0;
}
Так вот проблема у меня в следующем, когда в потоке начинает выполняться Run, поля текущего объекта _param и _callbackf пустые, хотя в StartThread после инициализации они со значением.
я думал может после выходя из метода дочерний поток завершается, но судя по тестовым чек поинтам, до туда контекст доходит вот только с параметрами беда.
Сильно не ругайте если что не так. Спасибо.