AnyChat技术支持论坛

标题: 关于绑定窗体句柄的问题 [打印本页]

作者: lincy    时间: 2015-2-6 14:05
标题: 关于绑定窗体句柄的问题
我的c#视频客户端,有两个form,在第一个form中创建第二个form并打开,在该form加载时绑定句柄窗体SystemSetting.Init(this.Handle);
现在遇到的问题是:当close该窗体后,又在第一个form中重新创建第二个form的一个实例并打开后,该实例不能接收到进入房间等消息。也就是第二次创建的窗体不能接受到消息。
我的理解是,第二次创建,form加载时重新绑定了窗体句柄,应该是可以接收到消息的
这是为啥涅?请教了

作者: lincy    时间: 2015-2-6 14:33
我找到原因了,是我在关闭form时没有调用AnyChatCoreSDK.Release();
作者: 廖斌    时间: 2015-2-6 14:49
lincy 发表于 2015-2-6 14:33
我找到原因了,是我在关闭form时没有调用AnyChatCoreSDK.Release();

哦,您是想在第一个窗体使用anychat完成之后,然后在第二个窗体重新初始化anychat吗?
建议您在一个anychat窗体上面初始化anychat就行了,在一个窗体上面接收消息。如果第二个窗体想用使用anychat消息的话,第一个窗体委托给第二个窗体就行了。
作者: lincy    时间: 2015-2-9 14:04
廖斌 发表于 2015-2-6 14:49
哦,您是想在第一个窗体使用anychat完成之后,然后在第二个窗体重新初始化anychat吗?
建议您在一个anyc ...

我是在一个窗体上使用消息,只是这个窗体需要被反复关闭和创建,每次创建就要重新绑定窗体句柄。我在关闭窗体时没有调用AnyChatCoreSDK.Release(),所以第二次创建窗体后绑定就不成功。现在已经可以了。谢谢。
作者: 一万    时间: 2015-2-13 22:50

我遇到一样的问题, 但是稍微不一样我是使用了VC封装成了ActiveX控件. 然后集成到一个 .net 应用程序内部, 结果第二个控件的事件全给了第一个控件了. 怎么搞???

Init的时候制定的NULL句柄, 如果换成控件的句柄会有效么???

搞了一天了才找到是这个问题, 但是还不知道如何解决呢.

给点 建议呗.



作者: 一万    时间: 2015-2-13 23:16

因为我负责开发的ActiveX控件, 而上层应用是其它公司的人开发的, 遵循以前(使用海康卡)的接口. 基于IE调用是没没问题的, 如果2个控件在2个IE的标签下是没问题的可以一个采集一个播放.

现在系统升级到C#下面, 发现了问题在一个进程控件内咱们的API回调Notify消息的时候全给第一个初始化的控件了, 导致第二个控件运行异常.
作者: admin    时间: 2015-2-14 10:50
您好,您是两个进程每个进程一个控件,还是一个进程里面有两个控件?
作者: 一万    时间: 2015-2-14 11:42

是一个C#写的进程里面有2个一样的控件, 其中一个采集, 另外一个播放. 然后Notify用的回调函数处理消息, 结果消息全给了第一个控件了, 第二个控件就处理异常了, 我还没有试传送窗口句柄, 然后处理窗口消息那样处理不知道行不行的呢. 底层的控件使用的是VC6实现的.

现在就想找到个办法来处理这个问题.
作者: admin    时间: 2015-2-14 11:47
是一个C#写的进程里面有2个一样的控件, 其中一个采集, 另外一个播放

您好,采集是用AnyChat采集,播放也是用AnyChat来播放吗?
作者: 一万    时间: 2015-2-14 12:12

是的, 都是用AnyChat写的控件. 采集是用一个, 播放使用另外一个, 2个控件本身差别很小的, 一个先启动, 另外一个后启动, 只是设置的昵称和视频语音控制不一样.
作者: admin    时间: 2015-2-14 12:15
您好,建议参考我们AnyChat for Web SDK的标准示例代码,应该可以满足您的需求:有一个本地采集窗口,有一个(或多个)远程视频播放窗口:http://www.anychat.cn/web/,示例代码于位AnyChat for Web SDK的src子目录下。
作者: 一万    时间: 2015-2-14 12:29

由于历史的原因, 就需要这么操作. 因为之前系统采用的海康卡的板卡形式, 然后接口基本固定了.

现在我想确认的是如果Init传入的是控件的句柄, 这个消息能正确的分别返回给对应的窗口么.

我这个测试如果控件分别加载到IE的两个标签页下面是没有问题的(貌似给分配的独立的进程空间), 现在集成到了C#程序下, 成了一个进程控件下原有的回调函数的处理就出了问题了.

而这2个控件之间又没法控制通讯, 或者消息下来如果集中到一个控件中, 也没法处理并发消息, 没有什么能区分分属2个窗口的.

作者: admin    时间: 2015-2-14 12:40
您好,目前AnyChat在同一个进程中暂时不支持创建多个示例,建议在某一个控件中进行初始化、连接、登录等操作,而另一个控件只需要操作音视频相关的API即可,不过这样就涉及到两个控件进行通信的过程了。

如果可能的话,建议用AnyChat for Web SDK已经封装好的控件。
作者: 一万    时间: 2015-2-14 12:57

哦, 明白了. 我看看想想办法吧. 另外咱们这个是本身设置的特性么, 以后有可能进行优化改进么.


作者: admin    时间: 2015-2-14 13:10
您的这项需求后续会反馈给研发团队,非常感谢您对AnyChat的关注!
作者: 一万    时间: 2015-2-14 16:05

能有什么技术手段知道当前进程空间内已经初始化过了么?

或者可以利用什么函数来判断.


作者: admin    时间: 2015-2-14 17:02
您好,您可以通过控件提供接口来查!




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3