c# 如何调用ocx回调函数

Handsome五爷 2015-04-22 11:31:13
用窗体程序调用了一个ocx控件,能够正常调用ocx控件的方法。
ocx中有“操作器消息通知”,是ocx回调函数。
不知道怎么调用。
以下是我尝试的方法。




...全文
384 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Handsome五爷 2015-04-27
  • 打赏
  • 举报
回复
引用 17 楼 diaodiaop 的回复:
所以 从你.出来的东西来看 这样注册是没错的. 因为axLedOcx1_OnCall等同于FireOnCall 另外一个 也是 拿oncall来说 你的名字 叫axLedOcx1_OnCall 他的名字叫FireOnCall 名字不一样而已. 并且 sender都带上的 也没错..主要是后面的e 你提示的那addr stat 以及flag 都有提示是什么意思.. 所以很明显 写法之类的 都符合文档. 至于如何调用 这不是你关心的... 我刚也说了 这是他们触发而不是你触发.连上硬件拨号试试吧
非常感谢您的回答。我第一次接触委托及回调函数。已经接上硬件设备试过。能够调用打开设备之类的方法,可是操作硬件之后程序没有反应,收不到返回值。就像是事件没有注册上一样。
Handsome五爷 2015-04-24
  • 打赏
  • 举报
回复
引用 10 楼 xian_wwq 的回复:
[quote=引用 9 楼 shuai275 的回复:] [quote=引用 6 楼 xian_wwq 的回复:] c/c++中的回调对应的c#中的委托 函数定义保持一致就可以了
对委托的概念只有一点点了解。 是否需要订阅事件?[/quote] 和事件没有必然联系 可以参考这个帖子 http://blog.csdn.net/aksnzhy/article/details/6767254[/quote] 这个帖子里的demo是c#高级编程里的吧,以前看过
引用 11 楼 wyd1520 的回复:
看那个e.xx属性就是你上面说的,但有点不明白立即返回值,事件是没有返回值的呀。可能不用管他吧。
打断点,这个事件一直没有被出发。
卧_槽 2015-04-24
  • 打赏
  • 举报
回复
回调函数是你调用的方法再通知你。 好比你找了个民工帮你修墙,他有一个回调函数叫做“该给工钱”了。你调用他的“砌墙“方法,并且传递”该给工钱“事件给他, 你自己处理如何”给工钱“事件。 回调函数不是给你调用的,是给你响应的,是别人调用你的方法。
by_封爱 版主 2015-04-24
  • 打赏
  • 举报
回复
所以 从你.出来的东西来看 这样注册是没错的. 因为axLedOcx1_OnCall等同于FireOnCall 另外一个 也是 拿oncall来说 你的名字 叫axLedOcx1_OnCall 他的名字叫FireOnCall 名字不一样而已. 并且 sender都带上的 也没错..主要是后面的e 你提示的那addr stat 以及flag 都有提示是什么意思.. 所以很明显 写法之类的 都符合文档. 至于如何调用 这不是你关心的... 我刚也说了 这是他们触发而不是你触发.连上硬件拨号试试吧
by_封爱 版主 2015-04-24
  • 打赏
  • 举报
回复
我虽然不太懂OCX里面的东西.不过下面我给你展示的 是c#调用c++里面的回调函数. 我觉得差不多吧

[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void CallBack([Out]sIteDataParam d);

public static CallBack c;

void init()
{
 c = new CallBack(my_callback);
}
void my_callback([Out] sIteDataParam d)
{
 //.......
}
也就是 我写了上面的代码之后 就表示我已经注册了这个回调函数. 我这个是跟硬件交互的代码,只要有人用硬件呼叫我的话就执行my_callback.
by_封爱 版主 2015-04-24
  • 打赏
  • 举报
回复
如果楼主只是说如何调用 那我回答你

axLedOcx1_OnCall(null.null);
axLedOcx1_OnScore(null,null);
您还满意吗? 或者是说 楼主到底明白不明白"回调函数"这个东西的意义? 或者从别的角度上来说..这个函数是"被动"的...而不是你主动触发.. 如果是调用方法 你直接写方法给参数就行了. 但是回调是封装起来,满足一定需求自动调用的函数..
Handsome五爷 2015-04-23
  • 打赏
  • 举报
回复
引用 6 楼 xian_wwq 的回复:
c/c++中的回调对应的c#中的委托 函数定义保持一致就可以了
对委托的概念只有一点点了解。 是否需要订阅事件?
Handsome五爷 2015-04-23
  • 打赏
  • 举报
回复
引用 5 楼 FoxDave 的回复:
就是生成的这两个函数吧。 看看e能点出来什么 再看看sender是什么类型
Handsome五爷 2015-04-23
  • 打赏
  • 举报
回复
引用 3 楼 wyd1520 的回复:
axLedOcx1.FireOnCall 有没有这方法?
很高兴,你能回答。没有FireOnCall这个方法。
xian_wwq 2015-04-23
  • 打赏
  • 举报
回复
c/c++中的回调对应的c#中的委托 函数定义保持一致就可以了
Justin-Liu 2015-04-23
  • 打赏
  • 举报
回复
就是生成的这两个函数吧。 看看e能点出来什么 再看看sender是什么类型
本拉灯 2015-04-23
  • 打赏
  • 举报
回复
引用 12 楼 Z65443344 的回复:
[quote=引用 11 楼 wyd1520 的回复:] 看那个e.xx属性就是你上面说的,但有点不明白立即返回值,事件是没有返回值的呀。可能不用管他吧。
是迅速返回,不是返回值 应该是说不要阻塞在这里吧[/quote] 那就不用管他吧,差不多这个参数就是直接给你引用的
於黾 2015-04-23
  • 打赏
  • 举报
回复
引用 11 楼 wyd1520 的回复:
看那个e.xx属性就是你上面说的,但有点不明白立即返回值,事件是没有返回值的呀。可能不用管他吧。
是迅速返回,不是返回值 应该是说不要阻塞在这里吧
本拉灯 2015-04-23
  • 打赏
  • 举报
回复
看那个e.xx属性就是你上面说的,但有点不明白立即返回值,事件是没有返回值的呀。可能不用管他吧。
xian_wwq 2015-04-23
  • 打赏
  • 举报
回复
引用 9 楼 shuai275 的回复:
[quote=引用 6 楼 xian_wwq 的回复:] c/c++中的回调对应的c#中的委托 函数定义保持一致就可以了
对委托的概念只有一点点了解。 是否需要订阅事件?[/quote] 和事件没有必然联系 可以参考这个帖子 http://blog.csdn.net/aksnzhy/article/details/6767254
xuzuning 2015-04-22
  • 打赏
  • 举报
回复
图一是那个 ocx 的说明吧? 那两个函数是需要你提供给 ocx 的 参数是 C++ 的类型,换成 C# 怎么说,不是很清楚
本拉灯 2015-04-22
  • 打赏
  • 举报
回复
axLedOcx1.FireOnCall 有没有这方法?
Handsome五爷 2015-04-22
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
什么sender,什么e的,哪里冒出来的,双击事件自动生成的吗? 如果不是,请定义成说明文档里的形式,3个参数,都表示什么已经说的很清楚了
双击自动生成的。 不知道怎么调用ocx的回调函数。
於黾 2015-04-22
  • 打赏
  • 举报
回复
什么sender,什么e的,哪里冒出来的,双击事件自动生成的吗? 如果不是,请定义成说明文档里的形式,3个参数,都表示什么已经说的很清楚了

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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