视频采集卡的二次开发,用C#做应用程序出错

nycgwqd 2013-10-06 10:43:27
我用海康的DS4000的视频采集卡,初始化完毕怎么只能打开一路图像啊?
4路的采集卡,为什么只有1路能打开呢?
用C++的DEMO没事,改成C# 就不行了
求指点,谢谢

HikVisionSDK是我用C#写的,包含了DLL中的函数名称,下面引用即可


public FormFullScreenShow()
{
InitializeComponent();

if (HikVisionSDK.InitDSPs() <= 0)
{
MessageBox.Show("视频压缩卡初始化失败!");
return;
}

for (int i = 0; i < PLAYER_MONITORS_COUNT; i++)
{
player_monitors[i] = new UCtrlPlayer();//初始化窗口
panel_RealPlay.Controls.Add(player_monitors[i]);//添加窗口
player_monitors[i].iSubWndIndex = i;//子窗口标记

}

iTotalDSPs = HikVisionSDK.GetEncodeChannelCount(); //获取系统中编码通道的总数
//MessageBox.Show(iTotalDSPs.ToString());
}




private void FormFullScreenShow_Load(object sender, EventArgs e)
{
PlayerMonitorsShowResize();//播放器重置
for (int i = 0; i < iTotalDSPs; i++)
{
handle[i] = HikVisionSDK.ChannelOpen(i);//..........................................................
MessageBox.Show(string.Format("handle[{0}]的句柄号为:{1}", i,handle[i]));
rec[i].Location = player_monitors[i].Location;
rec[i].Size = player_monitors[i].Size;
player_monitors[i].RealPlayStart(rec[i], handle[i]);
}
}

以上运行起来后,一切正常,通道总数也获取成功,就是我分了4个画面,只有画面1有图像,其他都没有
是我的代码写的有问题还是调用顺序不对呢?
...全文
279 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybbh3b 2013-10-09
  • 打赏
  • 举报
回复
引用 3 楼 nycgwqd 的回复:
同样的USB视频采集卡在VS2008 C++下面的可以正常运行起来,相关代码如下 g_TotalDSPs = InitDSPs();//初始化板卡 g_TotalDSPs 为全局变量(int) g_TotalChannel = GetTotalChannels();//获取通道总数 g_TotalChannel 为全局变量(int) SDK开发包提供的头文件中相关的如下 DVRS_API int __stdcall InitDSPs(); DVRS_API int __stdcall GetTotalChannels(); 这些都可以正常获取数据,板卡初始化成功返回1;通道总数获取为4; 现在看下C#中的相关代码: total_DspCount = API.InitDSPs();//total_DspCount 为全局变量(uint) total_ChanelCount = API.GetTotalChannels();//total_ChanelCount 为全局变量(uint) API是我根据SDK的头文件改写的入口,相关如下 /// <summary> /// 初始化DSP InitDSPs /// 说 明: 初始化系统中每一块板卡,应在应用软件程序启动时完成。如果返回值为0则表明 初始化失败,可能没有找到相应的DSP软件模块。 /// int __stdcall InitDSPs() /// </summary> /// <returns>系统内可用的软件模块个数。 </returns> [DllImport("Dvrshw.dll")] public static extern uint InitDSPs(); /// <summary> /// 获取通道数量 /// 说 明: 获取板卡中的通道数量。 /// int __stdcall GetTotalDSPs() /// </summary> /// <returns>0</returns> [DllImport("Dvrshw.dll")] public extern static uint GetTotalChannels(); 问题来了,C#运行也一切正常,不报告错误,板卡初始化成功(返回1)。但是获取通道总数的时候一直返回1,这个是怎么回事呢?应该是4才对啊? 请大家帮我看下。是不是我改写的有问题
应该有初始化的设置错误,仔细研究动态库吧!
nycgwqd 2013-10-09
  • 打赏
  • 举报
回复
nycgwqd 2013-10-08
  • 打赏
  • 举报
回复
同样的USB视频采集卡在VS2008 C++下面的可以正常运行起来,相关代码如下 g_TotalDSPs = InitDSPs();//初始化板卡 g_TotalDSPs 为全局变量(int) g_TotalChannel = GetTotalChannels();//获取通道总数 g_TotalChannel 为全局变量(int) SDK开发包提供的头文件中相关的如下 DVRS_API int __stdcall InitDSPs(); DVRS_API int __stdcall GetTotalChannels(); 这些都可以正常获取数据,板卡初始化成功返回1;通道总数获取为4; 现在看下C#中的相关代码: total_DspCount = API.InitDSPs();//total_DspCount 为全局变量(uint) total_ChanelCount = API.GetTotalChannels();//total_ChanelCount 为全局变量(uint) API是我根据SDK的头文件改写的入口,相关如下 /// <summary> /// 初始化DSP InitDSPs /// 说 明: 初始化系统中每一块板卡,应在应用软件程序启动时完成。如果返回值为0则表明 初始化失败,可能没有找到相应的DSP软件模块。 /// int __stdcall InitDSPs() /// </summary> /// <returns>系统内可用的软件模块个数。 </returns> [DllImport("Dvrshw.dll")] public static extern uint InitDSPs(); /// <summary> /// 获取通道数量 /// 说 明: 获取板卡中的通道数量。 /// int __stdcall GetTotalDSPs() /// </summary> /// <returns>0</returns> [DllImport("Dvrshw.dll")] public extern static uint GetTotalChannels(); 问题来了,C#运行也一切正常,不报告错误,板卡初始化成功(返回1)。但是获取通道总数的时候一直返回1,这个是怎么回事呢?应该是4才对啊? 请大家帮我看下。是不是我改写的有问题
nycgwqd 2013-10-07
  • 打赏
  • 举报
回复
顶起,求指点
wwwspider001 2013-10-07
  • 打赏
  • 举报
回复
把c++的demo发上来,对照看或许能看出来点什么

110,535

社区成员

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

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

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