ATL开发COM组件数组参数问题

flcnrcn flcnrcn 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

如下是我有用ATL开发COM组件给C#调用些的一个PositionChanged事件,但是C#调用Run方法是触发不了Fire_PostionChanged事件是怎么回事,请看下代码哪里有错。

//idl文件片段
library MyServerLib
{
	importlib("stdole2.tlb");
	[
		uuid(bb398ee4-645b-47bf-a76a-8d3d1bb57f68)
	]
	coclass CompReg
	{
		[default] interface IComponentRegistrar;
	};
	[
		uuid(95ba3e51-3b63-4662-b1ee-472dd0534cd5)
	]
	dispinterface _IDPositionEvents
	{
		properties:
		methods:
			[id(20)] HRESULT PositionChanged( [in] VARIANT vtArrayIndex[9],[in] VARIANT vtArrayValues[9]);
    }
}

//激发函数
HRESULT Fire_PositionChanged( VARIANT vtArrayIndex[9], VARIANT vtArrayValues[9])//事件激发函数
	{
		HRESULT hr = S_OK;
		T* pThis = static_cast<T*>(this);
		int cConnections = m_vec.GetSize();

		for (int iConnection = 0; iConnection < cConnections; iConnection++)
		{
			pThis->Lock();
			CComPtr<IUnknown> punkConnection = m_vec.GetAt(iConnection);
			pThis->Unlock();

			IDispatch* pConnection = static_cast<IDispatch*>(punkConnection.p);

			if (pConnection)
			{
				CComVariant avarParams[18];
				for (int i = 0; i < 9; i++)
				{
					avarParams[i].lVal = vtArrayIndex[i].lVal;
					avarParams[i].vt = VT_I4;
				}
				for (int i = 9; i < 18; i++)
				{
					avarParams[i].lVal = vtArrayValues[i - 9].lVal;
					avarParams[i].vt = VT_I4;
				}

				CComVariant varResult;

				DISPPARAMS params = { avarParams, NULL, 18, 0 };
				hr = pConnection->Invoke(20, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &params, &varResult, NULL, NULL);
			}
		}
		return hr;
	}

//触发激发函数
STDMETHODIMP CDPosition::Run(SHORT* pRetsult)
{
	// TODO: 在此处添加实现代码
	*pRetsult = 0;

	CComVariant a[9];
	int var1 = 10;
	for (int i = 0; i < 9; i++)
	{
		a[i].vt = VT_I4;
		a[i].lVal = var1;
		var1++;
	}
	
	CComVariant b[9];
	int var = 100;
	for (int i = 0; i < 9; i++)
	{
		b[i].vt = VT_I4;
		b[i].lVal = var;
		var++;
	}

	for(int i=0; i<2; i++)
	{
		this->Fire_PositionChanged( a, b);
		Sleep(2000);
	}
	return S_OK;
}

 

...全文
评论 1
收藏 已收藏
分享
返回顶部
flcnrcn
COM/DCOM/COM+ 864 成员 3,658 内容