在js中使用com组件,将js中的一个函数作为回调函数设置给com组件;在主线程中调用这个回调函数没有问题,但是如果在另一个线程里面调用这个回调函数则总是失败,请哪位大拿解决一下这个问题?//初始化创建线程
STDMETHODIMP CJSCallBack::Initialize(void)
{
// TODO: 在此添加实现代码
DWORD dThreadId;
m_hThreadHandle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)CallJspFunctionThread, this, 0, &dThreadId);
return S_OK;
}//线程函数
UINT CJSCallBack::CallJspFunctionThread(LPVOID param)
{
CJSCallBack* pCallBack = (CJSCallBack*)param; while(m_bRunThread)
{
while(m_bCallJspFunc)
{
pCallBack->CallJsFunction();
m_bCallJspFunc = FALSE;
} Sleep(1);
}
return 0;
}//设置回调函数
STDMETHODIMP CJSCallBack::SetJsCallbackFunc(VARIANT scriptCallback)
{
// TODO: 在此添加实现代码
if (scriptCallback.vt == VT_DISPATCH)
{
m_spCallback = scriptCallback.pdispVal;
} return S_OK;
}
//调用回调函数
void CJSCallBack::CallJsFunction()
{
CComVariant avarParams[1];
avarParams[0] = m_szDisplay; //指定回调函数的参数
DISPPARAMS params = { avarParams, NULL, 1, 0 };
if(m_spCallback)
{
HRESULT hr = m_spCallback->Invoke(0, 
IID_NULL, 
LOCALE_USER_DEFAULT, 
DISPATCH_METHOD, 
&params, NULL, NULL, NULL);
}
}
//触发调用回调函数
STDMETHODIMP CJSCallBack::Print(BSTR bstrToPrint, LONG lWait)
{
// TODO: 在此添加实现代码
_bstr_t bsPrint = bstrToPrint; 
char* szPrint = bsPrint; Sleep(500);
m_szDisplay = "Succeed to Print";
HRESULT hr = CallPrintFunction(szPrint);
if ( FAILED(hr) )
{
m_szDisplay = "Failed to Print";
}
switch (lWait)
{
case 0:
CallJsFunction();
break;
case 1:
{
m_bCallJspFunc = TRUE;
Sleep(30);
} break;
default:
break;
}
return S_OK;
}
    function TestCallBack() {
var obj = new ActiveXObject("CallBackForJs.JSCallBack.1"); 
        var result = obj.Initialize();
result = obj.SetJsCallbackFunc(printMsg);
obj.Print("abc",1);
obj.UnInitialize();
    }function printMsg(msg) {
        alert(msg);
    }
</script>