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

flcnrcn 2022-10-14 17:06:25

如下是我有用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;
}

 

...全文
239 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问

864

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧