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;
}

 

...全文
381 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-编程语言 发布问题, 以便更快地解决您的疑问
内容概要:本文系统介绍了智能体设计模式,旨在帮助开发者构建高效、可靠、具备目标导向能力的智能系统。文章从智能体的基本概念出发,阐述了其自主性、主动性、响应性和工具使用等核心特征,并强调了设计模式在解决智能体开发中常见挑战(如复杂任务分解、状态管理、多智能体协作)方面的关键作用。书中提炼了21种核心设计模式,涵盖基础执行(提示链、路由、并行化)、环境交互(工具使用、知识检索RAG)、自我提升(反思、异常处理)、协作通信(多智能体协作、A2A协议)及高级能力(规划、优先级排序、探索与发现)等多个层面。通过结合LangChain、Google ADK等主流框架的实战代码示例,详细展示了各模式的具体实现方法,最终阐明了如何将这些模式组合运用,以构建能处理复杂任务、具备自我纠错和持续优化能力的高级智能体系统。; 适合人群:具备一定人工智能和编程基础,从事AI应用开发、系统架构设计的研发人员,特别是希望深入理解并实践智能体系统构建的工程师和研究人员。; 使用场景及目标:①学习如何将大语言模型(LLM)从简单的文本生成器转变为能感知、决策、行动的智能体;②掌握构建多步骤、有状态、能调用工具、支持多智能体协作的复杂AI系统的方法;③解决智能体在真实环境中面临的可靠性、效率和安全性问题,如错误恢复、资源优化和人类监督。; 阅读建议:本书强调实践导向,建议读者在学习过程中结合代码示例进行动手实践,尝试在LangChain、LangGraph或Google ADK等框架中复现和调试各设计模式。同时,应着重理解不同模式之间的协同关系,思考如何将多种模式组合起来解决实际业务问题,而不仅仅是孤立地学习单个模式。

864

社区成员

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

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