VB调用ATL写的COM组件的问题
用ATL写了个COM组件,在组件中启动一个线程进行数据处理,在线程处理数据过程中,通过连接点通知VB写的调用程序计算的进度,在VB IDE中运行没问题,编译后运行就会崩溃。请问为什么会这样?
怎样解决这个问题呢?
问题点数:50、回复次数:5Top
1 楼T97102003(池塘里的水手)回复于 2005-09-28 16:03:33 得分 0
upTop
2 楼bluesky23(乐天_正在开发右半脑。。。^_^)回复于 2005-09-28 21:25:55 得分 25
在几处容易出现问题的地方输出信息到日志中,再看看Top
3 楼kongguangming(Fly)回复于 2005-09-29 09:43:15 得分 25
资源释放问题Top
4 楼T97102003(池塘里的水手)回复于 2005-10-09 10:29:18 得分 0
再UP.有经验的兄弟请指点Top
5 楼T97102003(池塘里的水手)回复于 2005-10-09 10:42:50 得分 0
做了一个最简单的例子,还是出错
DWORD WINAPI ThreadFun(LPVOID lpVoid);
STDMETHODIMP CAdd::Add(long a, long b, long *pVal)
{
*pVal = a + b;
CreateThread(NULL, 0, ThreadFun, this, 0, 0);
return S_OK;
}
DWORD WINAPI ThreadFun(LPVOID lpVoid)
{
CAdd *pAdd = (CAdd*) lpVoid;
for(int i=0 ; i<65535 ; i++)
{
pAdd->Fire_OnAdd(i, i*2);
}
return 0;
}
HRESULT Fire_OnAdd(LONG a, LONG b)
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[2];
int nConnections = m_vec.GetSize();
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
if (pDispatch != NULL)
{
VariantClear(&varResult);
pvars[1] = a;
pvars[0] = b;
DISPPARAMS disp = { pvars, NULL, 2, 0 };
pDispatch->Invoke(0x1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;
}Top




