C#调用ocx控件的方法,传递ref byte参数出错

f7anty f7anty 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
OCX使用C++写的
方法为:char MyFunc( unsigned char * src , unsigned char * result)。

我现在在一个C#程序里使用这个方法(ActiveX控件已经导入并实例化,比如叫ax),MyFunc自动生成的原型是
byte MyFunc( ref byte src , ref byte result)。
我是这样调用的,用C#
byte[] src=new byte[256];
byte[] result=new byte[256];
ax.MyFunc(ref src[0], ref result[0])

出现异常:
检测到 InvalidVariant
Message: 从非托管 VARIANT 转换为托管对象的过程中检测到无效 VARIANT。将无效 VARIANT 传递给 CLR 会导致意外的异常、损坏或数据丢失。

参数传递应该是正确的,不知道是怎么回事。
请高手帮帮忙!!!
...全文

相关推荐

c#调用ocx问题

c#调用ocx问题,简洁明了。在C#中使用ActiveX的OCX控件,难免会碰上在函数中传递数组的情况。

meandshe

C#上位机集成金橙子激光振镜控制:MarkEzd.dll实战与架构设计

在工业自动化与运动控制领域,上位机软件通过动态链接库(DLL)与硬件设备通信是核心技术之一。其原理在于,DLL作为软件与硬件驱动间的中间件,封装了底层的协议与指令,为上层的应用程序提供了标准化的API接口。这项技术的核心价值在于实现了软件逻辑与硬件控制的解耦,极大地提升了开发效率与系统的可维护性。在激光加工、精密打标、视觉定位等典型应用场景中,开发者常需集成特定的硬件控制库,例如金橙子(Golden Laser)振镜控制卡配套的MarkEzd.dll。该DLL承担了板卡初始化、命令缓冲、状态监控等关键任务。

weixin_30861459

Flash与C#通信

C# 利用Flash控件与Flash通信

zstared

c#窗体加入flash教程急完美屏蔽鼠标右键

1.选择“工具箱”,单击鼠标右键,在弹出的快捷菜单中选择“选择项”。 2.弹出“选择工具箱项”对话框,选择“COM组件”选项卡。 3.在COM组件列表,单击[浏览]按钮,在对话框中选择"C:\Windows\System32\Macromed\Flash\Flash10h.ocx"。(版本可能有细微差别) 在工具箱的容器面板里有个MacroMedia Flash Factory Object 而且自动添加了引用AxShockwaveFlashObjects, ShockwaveFlashObjects 如果工具箱中已经有了,可以删除重新添加,以便自动添加引用。 在放入窗体中时报错“未能导入ActiveX 控件。请确保它已正确注册”. 所以手动添加如下代码:

大宇宙尘埃

mongodb-linux-x86_64-ubuntu2004-8.0.13.tgz

mongodb-linux-x86_64-ubuntu2004-8.0.13

一and一>二
评论 18
收藏 已收藏
分享
返回顶部
f7anty
C# 111,129 成员 642,539 内容