昨天将RTC Client API SDK v1.3看了看,为了尽快掌握其概貌,现看看他的范例,发现有个VB6的范例比较简单,入门级,于是便想打开看看,用Visual Studio .NET 2003想将该范例转换为.Net下,但报告说无rtccore.dll v1.0版本,转换无法完成。原来,SDK中的范例是在SDK v1.0下做的,打开vb6窗体文件frmMain.frm文件看看,发现很简单,于是干脆手工转换了。
一、在Visual Studio .NET2003下新建一VB.NET工程,选择VB下的Windows应用程序。
二、将窗体form1命名为frmMain(这也是我经常用的第一个主窗体名字),并引入interop.rtccore.dll对象。
这个过程很简单了。
三、在应用程序类定义之前,引入rtccore.dll名字空间:
Imports RTCCore
(注:这个命名与第一篇文章(编译interop.rtccore.dll)中命令行的参数有关,并不一定全都是这个名字)。
四、查看frmMain.frm中界面的定义,根据这些定义自己绘制界面。
需要注意的地方:
1、vb6中的frame在.NET下没有了,可以用panel或者groupbox控件代替,最好用groupbox控件,可以但到标题。
2、vb6中的lable、form等控件的属性caption在.NET下用text属性代替了。
3、vb6中的option控件在.NET下用radiobutton控件代替。
4、.NET不支持Attribute定义,把相关的语句Attribute g_objRTCClientWithEvents.VB_VarHelpID = -1去掉即可。该语句主要是和rtc client组件的帮助有关。
5、.NET不支持控件数组(这是老套的VB6代码),可以用控件循环或者干脆将11个电话号码按钮分开写。
五、讲frmMain.frm中的除去窗体定义的代码全部拷贝到.NET窗体下的frmMain.vb中,注意拷贝的顺序。
六、修改拷贝过来的代码。
1、常数定义拷贝在Inherits System.Windows.Forms.Form语句后面,并注释掉Attribute定义一行。
2、出现很多提示,报告说是变量未定义,如RTCLM_BOTH,实际上是没用引入相关命名空间,可以修改成RTC_LISTEN_MODE.RTCLM_BOTH,或者引入RTC_LISTEN_MODE名字空间。
3、根据修改的控件再修改相关代码和控件属性定义代码。
4、最好将on error goto checkerror语句改成try...Catch ex As Exception...end try形式。
5、窗口句柄语句可以修改成如下形式:
hwndParent = Me.Handle.ToInt64,这是因为.NET下VB不支持hWnd成员了。
七、修改完所有代码后,编译生成一个可执行文件。
八、为了在本机上运行,将生成的可执行文件连同interco.rtccore.dll文件拷贝到另一个目录,并运行可执行文件。同时在.NET环境中运行工程,于是得到2个范例的内存进程,可以用2个范例进程相互通信了(我是在本机上实现的,能够很清晰地看到摄像头传递的图像-只是两幅图像是一模一样的)。