C#视频服务器调用C++写的dll问题

笨鸟工作室 2012-09-21 03:31:19
有个打开通道的函数,参数中有一个结构体,结构体一参数是一个回调函数,不知道如何调用 ,另外对个别参数解释也不明白,希望给指点一下。
...全文
177 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangjilin2005 2013-04-27
  • 打赏
  • 举报
回复
你好,我现在也做这个,如何打开通道,获取视频显示呢,希望能发个程序给我参考下,万分感谢。
wushuang443 2012-11-28
  • 打赏
  • 举报
回复
我也在搞这快啊。我做c++的,现在c#要对接ipc视频上去,不会掉啊。有谁做过c#调用视频dll的例子啊。给个
笨鸟工作室 2012-09-21
  • 打赏
  • 举报
回复
哪个朋友能帮我用C#大体写一下那个结构体代码及调用的时候结构体参数赋值(主要是回调函数参数),会的写明白点,大家相互交流!
iyomumx 2012-09-21
  • 打赏
  • 举报
回复
在定义
public struct HHOPEN_CHANNEL_INFO
前加上
[StructLayout(LayoutKind.Sequential)]

否则内存对齐会出现问题。
笨鸟工作室 2012-09-21
  • 打赏
  • 举报
回复
做过这块的朋友给帮忙指点一下,谢谢
笨鸟工作室 2012-09-21
  • 打赏
  • 举报
回复
结构体定义方式如下:
class myNetClient
{
/// <summary>
/// 打开通道的参数结构
/// </summary>
public struct HHOPEN_CHANNEL_INFO
{
public System.UInt32 dwClientID;
public System.UInt32 nOpenChannel;
public NET_PROTOCOL_TYPE protocolType;
public ChannelStreamCallback funcStreamCallback;
public System.IntPtr pCallbackContext;
}
}
iyomumx 2012-09-21
  • 打赏
  • 举报
回复
你的结构体 HHOPEN_CHANNEL_INFO 是怎么定义的?
pOpenInfo.funcStreamCallback = _ChannelStreamCallback;
这里,用IntPtr定义funcStreamCallback,并手动封装委托比较合适。
笨鸟工作室 2012-09-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
你这个涉及到结构体中含结构体和回调函数,自己查吧
[/Quote]
能帮我看看我写的C#代码问题出在哪吗?给指点一下,谢谢,你这样回答对我来说还是不懂,麻烦耐心一下,谢谢!
bdmh 2012-09-21
  • 打赏
  • 举报
回复
你这个涉及到结构体中含结构体和回调函数,自己查吧
笨鸟工作室 2012-09-21
  • 打赏
  • 举报
回复
我自己用C#写的相关代码,调用时返回100,意思是参数错误,就是那个结构体参数的问题,了解的朋友给指点一下,谢谢!

private void button2_Click(object sender, EventArgs e)
{
int c;
myNetClient.ChannelStreamCallback _ChannelStreamCallback = new myNetClient.ChannelStreamCallback(ChannelStreamCallbacks);

UInt32 dwClientID = new UInt32();
IntPtr pContext = new IntPtr();
IntPtr hOpenChannel = new IntPtr();

//音视频信息结构体
myNetClient.HHAV_INFO avInfo=new myNetClient.HHAV_INFO();
avInfo.nVideoEncodeType = 0x05;
avInfo.nVideoHeight=240;
avInfo.nVideoWidth=320;
//avInfo.nAudioEncodeType=;
//avInfo.nAudioChannels=;
//avInfo.nAudioBits=;
//avInfo.nAudioSamples=;
//定义打开通道的参数结构体
myNetClient.HHOPEN_CHANNEL_INFO pOpenInfo = new myNetClient.HHOPEN_CHANNEL_INFO();
pOpenInfo.dwClientID = dwClientID;
pOpenInfo.nOpenChannel = 1;
pOpenInfo.protocolType = myNetClient.NET_PROTOCOL_TYPE.NET_PROTOCOL_TCP;
pOpenInfo.funcStreamCallback = _ChannelStreamCallback;//(hOpenChannel, IntPtr.Zero, dwClientID, pContext, myNetClient.ENCODE_VIDEO_TYPE.EV_TYPE_CVGA,avInfo);
pOpenInfo.pCallbackContext = pContext;

//打开音视频通道
c = myNetClient.HHNET_OpenChannel("192.168.55.160", 5000, "NVS", "admin", "admin", pOpenInfo,out hOpenChannel,this.Handle);
if (c == 0)
{
MessageBox.Show("可以在Panale1中预览");
}
else
{
MessageBox.Show("打开失败" + " 错误码:" + c.ToString());
}
}

110,555

社区成员

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

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

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