Delphi 到底应该如何调用COM?

kim_fu 2011-01-25 09:36:12
有一个COM文件 CimioX.dll,我在Delphi7中用 Import Type Library 导入后,在ActiveX面板中生成一个控件TCimio,
引入的类及接口:
CoCimio = class
class function Create: _Cimio;
class function CreateRemote(const MachineName : string): _Cimio;
TCimio = class(TOleServer);
_Cimio = interface(IDispatch);

三种方法调用结果不一样

方法1:使用ActiveX面板上的控件

拖动一个TCimio放到窗体上,执行 Cimio1.OpenCIMIO(); 就提示访问非法内存

方法2:使用接口

Var
Cim:_Cimio;
begin
Cim := CoCimio.Create;
Cim.OPenCIMIO();//出错;

方法3:
Var
Cim:Variant;
begin
Cim := CreateOleObject('CimioX.Cimio');
Cim.OpenCIMIO();//结果正确。


方法一与方法二都是采用 CreateComObject 来创建COM对象
方法三采用 CreateOleObject 来创建COM对象

最关键的是,CimioX.dll中有一个方法是需要传递PSafeArray类型参数的
原型如下:
function GetBuffer(var Buffer:PSafeArray; TimeOut:Smallint):Integer;safecall;

当我用第三种方法CreateOleObject 后,执行
var
v:Variant;
Cim:Variant;
begin
Cim := CreateOleObject('CimioX.Cimio');
v := VarArrayCreate([0,200],varInteger);
Cim.GetBuffer(PSafeArray(TVarData(v).VArray),100);//编译不通过
//编译错误为:"Type not allowed in Variant Dispatch call";

而第一种和第二种方法都可以传递PSafeArray类型参数。

我懵了,不知道该怎么弄了。

我想要的结果:
让第一种或第二种方法执行函数正确,或者第三种方法能传入PSafeArray参数。

高手帮忙啊。
...全文
623 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kye_jufei 2011-02-07
  • 打赏
  • 举报
回复
直接CreateOleObject不行嗎。。。
wdljn 2011-01-30
  • 打赏
  • 举报
回复
用CreateOleObject方法,不用导入什么东西
szuzsq 2011-01-26
  • 打赏
  • 举报
回复
COM不是一般ComCreateInstance()?
CaiBirdy 2011-01-26
  • 打赏
  • 举报
回复
COM就是CoInitialize,结束最好要调用CoUninitialize,都在ActiveX里
OLE的是OleInitialize
CaiBirdy 2011-01-26
  • 打赏
  • 举报
回复
可能是你没有初始化COM,就是那个什么什么init啥的记不清
内容概要:本文系统阐述了利用蒙特卡洛方法生成风能与太阳能出力的随机场景,并通过场景削减与聚类算法提取典型场景的技术流程,旨在有效降低新能源出力不确定性对电力系统优化调度的影响。文中详细介绍了概率分布建模、风光出力场景的随机模拟、冗余场景的削减以及基于欧式距离的聚类分析等关键步骤,并提供了完整的Matlab和Python代码实现,便于用户复现与应用。该方法最终输出若干代表性典型场景,可广泛应用于微电网规划、储能系统配置、电力市场出清及综合能源系统优化调度等研究领域。; 适合人群:具备电力系统、可再生能源或优化调度背景,熟悉Matlab/Python编程语言,从事相关领域科研工作的研究生、高校教师及工程技术人员。; 使用场景及目标:①解决风光发电出力的强随机性与间歇性问题,为含高比例新能源的电力系统提供可靠的输入边界条件;②掌握蒙特卡洛模拟与场景削减聚类的完整技术链条,提升在不确定性建模方面的研究能力;③将典型场景应用于微电网能量管理、储能优化配置、电力系统随机规划与鲁棒调度等实际工程项目与学术研究中。; 阅读建议:建议结合所提供的代码逐模块运行与调试,深入理解场景生成的概率模型设定、削减算法的阈值选择及聚类过程中的相似性度量方法,重点关注算法参数对最终典型场景数量与代表性的影晌,并可进一步拓展至负荷、电价等其他不确定性因素的场景建模应用。
该数据集生成基于气象再分析数据驱动的网格化每日水文时间序列,作为全球洪水预警系统(GloFAS)的核心产品。该数据通过使用ERA5气象再分析数据强制开源LISFLOOD水文模型生成,数据插值至GloFAS分辨率并以24小时时间步长输出。两种不同的ERA5强迫数据导致产生两类水文数据:中间型采用ERA5实时数据(ERA5T)每日更新,综合型使用综合ERA5再分析数据每月更新。 所有GloFAS和EFAS数据集隶属于哥白尼应急管理服务(CEMS)的洪水预报操作体系,由欧盟委员会联合研究中心负责管理、技术实施和发展。这些水文数据集不仅支持洪水监测和预警,还为应急响应、风险管理及气候影响评估提供科学依据。ERA5T数据因其快速获取的优势,使系统具备近实时的洪水监测能力,而综合型数据则通过更高质量的再分析资料确保长期水文模拟的准确性与一致性。 在数据处理过程中,LISFLOOD模型结合地形、土地利用和水系分布等地理信息,提升水文过程的模拟精度。随着数据更新频率的提高与模型不断优化,GloFAS在全球范围内的洪水预警能力逐步增强,能够覆盖偏远地区及缺乏实测数据的流域,为国际灾害防控提供关键支持。 数据名称:高精度中国逐日径流量数据 数据格式:TIF/Excel 空间分布:0.05° 空间范围:全国 时间范围:1979-2024 时间尺度:逐日 所含变量:河流径流量栅格 变量单位:立方米/秒
内容概要:本文系统研究了离散时间线性系统中基于共识的分布式滤波器的稳定性与最优性问题,重点分析了KF、DKF、SMDKF、CI、ICF、HCMCI等多种滤波算法在多智能体系统状态估计中的理论性质与实现机制。研究深入探讨了各算法在信息融合策略、一致性更新规则、网络拓扑依赖性等方面的差异,结合Matlab代码实现了算法仿真与性能对比,验证了其在复杂动态环境下的收敛性、鲁棒性与估计精度,为分布式状态估计提供了理论支撑与实践工具。; 适合人群:具备控制理论、信号处理及多智能体系统基础知识,熟悉Matlab编程,从事自动化、电力系统、机器人或传感器网络等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多微电网、无人机集群、智能交通等分布式系统的状态估计任务;②为高可靠性、去中心化系统提供滤波算法选型与优化设计依据;③服务于学术研究中的算法复现、性能评估与工程原型开发。; 阅读建议:建议结合所提供的Matlab代码进行仿真实践,重点关注不同滤波器在一致性融合机制与网络通信结构中的实现细节,同时配合相关理论文献深入理解其稳定性证明与最优性推导过程,以实现理论分析与数值实验的深度融合。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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