首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于 C# 调用 VC DLL !分不够可加!

2012-05-21 
关于 C# 调用 VC DLL 在线等!!!分不够可加!!!数据结构typedef struct _NET_CONNECT_STRUCT{DWORD SrcIPin

关于 C# 调用 VC DLL 在线等!!!分不够可加!!!
数据结构
typedef struct _NET_CONNECT_STRUCT
{
DWORD SrcIP;
int SrcSlot;
int SrcPort; 
DWORD DesIP;
int DesSlot;
int DesPort;
DWORD MulAddr;
long MulPort;
int Mode;
int Prior;
int Param;
long ServerPort;
long ClientPort;
}NET_CONNECT_STRUCT,*PNET_CONNECT_STRUCT;
参数说明:
SrcIP: 4字节,视频源IP地址,网络字节序;
SrcSlot: 4字节,视频源槽位号,1-16;
SrcPort: 4字节,视频源端口号,1-16;
DesIP: 4字节,接收端IP地址,网络字节序;
DesSlot: 4字节,接收端槽位号,1-16;
DesPort: 4字节,接收端端口号,1-16;
MulAddr: 4字节,多播地址,多播方式时用于设置多播地址,设为0时系统自动生成多播地址;
MulPort: 4字节,备用;  
Mode: 4字节,数据流传输模式,0-单播,1-多播;
Prior: 4字节,连接权限,用户连接的权限;(现在系统内部默认为:权限组=0,优先级=8,请设置为:0x00000000)
Param: 4字节,连接参数,数据源采用的参数,在系统设置的参数表中选定;
ServerPort: 4字节,视频源的指令端口;
ClientPort: 4字节,备用。

音视频接口函数

4.1 初始化SDK
int AVT_NET_Init(char *pAddr);
pAddr:用于接收数据流的网卡IP地址,字符串格式如:“192.168.1.1”;
返回值:初始化成功返回0,否则返回非0。

4.2 释放SDK
void AVT_NET_Release();

4.3 获取KeyColor
DWORD AVT_NET_GetKeyColor()
返回值:KeyColor,RGBA格式,用于设置显示窗口的背景色。

4.4 设置KeyColor
int AVT_NET_SetKeyColor(DWORD rgb);
rgb: KeyColor,格式为RGBA;
返回值: 调用成功返回0,否则非0。

4.5 获取错误码
int AVT_NET_GetLastError();
返回值: 错误码。

4.6 建立到本机(PC)的视频连接
HANDLE AVT_NET_Open(PNET_CONNECT_STRUCT ncs);
ncs: NET_CONNECT_STRUCT结构指针;
返回值: 建立连接成功返回连接句柄,必须保存连接句柄以调用其它功能接口;失败则返回NULL,可调用AVT_NET_GetLastError接口函数来获得错误码。
需要注意的参数:
ServerPort: 设为40000,暂定为固定值;
DesIP: 本机IP,网络字节序;
DesSlot及DesPort:用于判断本地的接收端口,每路视频连接具有不同的组合;
MulAddr: 单播连接时不需要设置该参数,多播时设为0则由系统自动生成多播IP。



以下我的调用 报连接失败!!!

//注册SN
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern int AVT_NET_SetLicence(string pSN);

  //初始化SDK
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern int AVT_NET_Init(string pAddr);

  //释放SDK
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern void AVT_NET_Release();

  //获取KeyColor
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern uint AVT_NET_GetKeyColor();

  //设置KeyColor
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern int AVT_NET_SetKeyColor(uint rgb);
  //rgb: KeyColor,格式为RGBA

  //获取错误码
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern int AVT_NET_GetLastError();
  //返回值: 错误码

  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
  public struct PNET_CONNECT_STRUCT
  {
  public uint SrcIP;
  public int SrcSlot;
  public int SrcPort;
  public uint DesIP;
  public int DesSlot;
  public int DesPort;
  public uint MulAddr;
  public int MulPort;
  public int Mode;
  public int Prior;
  public int Param;
  public int ServerPort;
  public int ClientPort;
  }

  //建立到本机(PC)的视频连接
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern IntPtr AVT_NET_Open(ref PNET_CONNECT_STRUCT ncs);
  //ncs: NET_CONNECT_STRUCT结构指针;
  //返回值: 建立连接成功返回连接句柄,必须保存连接句柄以调用其它功能接口;
  // 失败则返回NULL,可调用AVT_NET_GetLastError接口函数来获得错误码。
  //需要注意的参数:
  //ServerPort: 设为40000,暂定为固定值;
  //DesIP: 本机IP,网络字节序;
  //DesSlot及DesPort:用于判断本地的接收端口,每路视频连接具有不同的组合;
  //MulAddr: 单播连接时不需要设置该参数,多播时设为0则由系统自动生成多播IP。

  //显示图像
  [DllImport("avt_net.dll", CharSet = CharSet.Ansi)]
  public static extern int AVT_NET_Draw(IntPtr hand, IntPtr winhand);


  //hand: 调用AVT_NET_Open或AVT_NET_RecordOpen接口时返回的句柄;
  //winhand: 用来显示图像的窗口句柄,该窗口的背景色必须设为KeyColor才能显示图像,可以调用GetKeyColor接口获得KeyColor;
  //返回值: 调用成功返回0,否则非0。可调用AVT_NET_GetLastError 接口函数来获得错误码。

  public static UInt32 IP2Int(string ipStr)
  {
  string[] ip = ipStr.Split('.');
  uint ipCode = 0xFFFFFF00 | byte.Parse(ip[3]);
  ipCode = ipCode & 0xFFFF00FF | (uint.Parse(ip[2]) << 0x8);
  ipCode = ipCode & 0xFF00FFFF | (uint.Parse(ip[1]) << 0x10);
  ipCode = ipCode & 0x00FFFFFF | (uint.Parse(ip[0]) << 0x18);
  return ipCode;
  }

  public static Color UIntToColor(uint color)
  {
  byte a = (byte)(color >> 24);
  byte r = (byte)(color >> 16);
  byte g = (byte)(color >> 8);
  byte b = (byte)(color >> 0);
  return Color.FromArgb(a, r, g, b);
  }

  private void button1_Click(object sender, EventArgs e)
  {
  AVT_NET_SetLicence("AAAAAAA");
  AVT_NET_Init("192.168.2.44");
  uint mycolor = AVT_NET_GetKeyColor();
  AVT_NET_SetKeyColor(mycolor);
  PNET_CONNECT_STRUCT pcs = new PNET_CONNECT_STRUCT();
  //视频源IP地址
  pcs.SrcIP = IP2Int("192.168.12.215");
  //视频源槽位号,1-16
  pcs.SrcSlot = 1;
  //视频源端口号,1-8;
  pcs.SrcPort = 1;
  //接收端IP地址
  pcs.DesIP = IP2Int("192.168.2.44");
  //接收端槽位号,1-16;
  pcs.DesSlot = 1;
  //接收端端口号,1-16;
  pcs.DesPort = 1;
  //多播地址,多播方式时用于设置多播地址,设为0时系统自动生成多播地址;
  pcs.MulAddr = 1;
  //备用
  pcs.MulPort = 0;
  //数据流传输模式,0-单播,1-多播;
  pcs.Mode = 0;
  //连接权限,用户连接的权限;(现在系统内部默认为:权限组=0,优先级=8,请设置为:0x00000000)
  pcs.Prior = 255;
  //连接参数,数据源采用的参数,在系统设置的参数表中选定;
  pcs.Param = 0;
  //视频源的指令端口;
  pcs.ServerPort = 40000;
  //备用。
  pcs.ClientPort = 0;

  IntPtr myhand = AVT_NET_Open(ref pcs);
  this.Text = AVT_NET_GetLastError().ToString();

  this.pictureBox1.BackColor = UIntToColor(mycolor);
  AVT_NET_Draw(myhand, this.pictureBox1.Handle);
  //this.pictureBox1.BackColor = Color.Black;
  }

[解决办法]
这样调用太复杂了,把C++DLL做成ATLCOM接口库,引入到C#中,自动生成调用接口。
[解决办法]
楼上强大。学习了
[解决办法]

热点排行