111,129
社区成员
发帖
与我相关
我的任务
分享
typedef struct tagJBNV_SERVER_INFO
{
DWORD dwSize; //结构大小
DWORD dwServerFlag; //服务器类型
DWORD dwServerIp; //服务器IP(整数表示形式)
char szServerIp[16]; //服务器IP(字符串表示形式)
WORD wServerPort; //服务器端口
WORD wChannelNum; //通道数量
DWORD dwVersionNum; //版本
char szServerName[32]; //服务器名称
DWORD dwServerCPUType; //当前CPU类型
BYTE bServerSerial[48]; //服务器序列号,具有唯一标识功能
BYTE byMACAddr[6]; //服务器的物理地址
DWORD dwAlarmInCount; //告警输入个数
DWORD dwAlarmOutCount; //告警输出个数
DWORD dwSysFlags; //系统支持的功能
DWORD dwUserRight; //当前用户权限
DWORD dwNetPriviewRight; //网络观看权限
char csServerDes[64]; //服务器描述
}JBNV_SERVER_INFO,*PJBNV_SERVER_INFO;
//函数是:
DWORD WINAPI JBNV_GetServerInfo(HANDLE hServer,JBNV_SERVER_INFO *lpsi);
/// <summary>
/// 服务器基本信息结构
/// </summary>
[StructLayout(LayoutKind.Sequential, CharSet= CharSet.Ansi)]
public struct JBNV_ServerInfo
{
public uint dwSize; // 结构大小
public uint dwServerFlag; // 服务器类型
public uint dwServerIp; // 服务器IP(整数表示形式)
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] szServerIp; // 服务器IP(字符串表示形式)
public UInt16 wServerPort; // 服务器端口
public UInt16 wChannelNum; // 通道数量
public uint dwVersionNum; // 版本
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
public char[] szServerName;
public uint dwServerCPUType; // 当前CPU类型
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 48)]
public byte[] bServerSerial;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 6)]
public byte[] byMACAddr;
uint dwAlarmInCount; // 告警输入个数
uint dwAlarmOutCount; // 告警输出个数
uint dwSysFlags; // 系统支持的功能
uint dwUserRight; // 当前用户权限
uint dwNetPriviewRight; // 网络观看权限
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)]
public char[] csServerDes;
}
/// <summary>
/// 获取视频服务器信息
/// </summary>
/// <param name="hServer">视频服务器句柄</param>
/// <param name="serverInfo">返回的视频服务器基本信息</param>
/// <returns>错误代码</returns>
[DllImport("JBNVSDK.dll", CharSet = CharSet.Ansi)]
public extern static JBNV_ErrorCode JBNV_GetServerInfo(IntPtr hServer, ref IntPtr serverInfo);
// 调用:
IntPtr serverInfo = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(JBNV_ServerInfo)));
re = JBNV_DLLFuction.JBNV_GetServerInfo(hServer, ref serverInfo);
JBNV_ServerInfo info = (JBNV_ServerInfo)Marshal.PtrToStructure(serverInfo, typeof(JBNV_ServerInfo));
public extern static Int32 JBNV_GetServerInfo(IntPtr hServer, /*ref*/ IntPtr serverInfo);IntPtr serverInfo = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(JBNV_ServerInfo)));
re = JBNV_DLLFuction.JBNV_GetServerInfo(hServer, serverInfo);
JBNV_ServerInfo info = (JBNV_ServerInfo)Marshal.PtrToStructure(serverInfo, typeof(JBNV_ServerInfo));
Marshal.FreeHGlobal(serverInfo);
// 传递到该函数的初始结构包含以下元素:
typedef struct _OSVERSIONINFO
{
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[ 128 ];
} OSVERSIONINFO;
// 函数原型:
BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInfo);
// C#中的定义
[ StructLayout( LayoutKind.Sequential )]
public struct OSVersionInfo2
{
public int OSVersionInfoSize;
…
[ MarshalAs( UnmanagedType.ByValTStr, SizeConst=128 )]
public String versionString;}
public class LibWrap
{
[ DllImport( "kernel32" )]
public static extern bool GetVersionEx( [In, Out] OSVersionInfo osvi );
[ DllImport( "kernel32", EntryPoint="GetVersionEx" )]
public static extern bool GetVersionEx2( ref OSVersionInfo2 osvi ); }
// 函数调用:
public class App
{
public static void Main()
{
Console.WriteLine( "\nPassing OSVersionInfo as class" );
OSVersionInfo osvi = new OSVersionInfo();
osvi.OSVersionInfoSize = Marshal.SizeOf( osvi );
LibWrap.GetVersionEx( osvi );
Console.WriteLine( "Class size: {0}", osvi.OSVersionInfoSize );
…
Console.WriteLine( "\nPassing OSVersionInfo as struct" );
OSVersionInfo2 osvi2 = new OSVersionInfo2();
osvi2.OSVersionInfoSize = Marshal.SizeOf( osvi2 );
LibWrap.GetVersionEx2( ref osvi2 ); Console.WriteLine( "Struct size: {0}", osvi2.OSVersionInfoSize );
…
}
}
// 结构定义:
[StructLayout(LayoutKind.Sequential)]
public struct JBNV_ServerInfo
{
public uint dwSize; // 结构大小
public uint dwServerFlag; // 服务器类型
public uint dwServerIp; // 服务器IP(整数表示形式)
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string szServerIp; // 服务器IP(字符串表示形式)
public UInt16 wServerPort; // 服务器端口
public UInt16 wChannelNum; // 通道数量
public uint dwVersionNum; // 版本
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string szServerName;
public uint dwServerCPUType; // 当前CPU类型
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 48)]
public byte[] bServerSerial;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.U1, SizeConst = 6)]
public byte[] byMACAddr;
uint dwAlarmInCount; // 告警输入个数
uint dwAlarmOutCount; // 告警输出个数
uint dwSysFlags; // 系统支持的功能
uint dwUserRight; // 当前用户权限
uint dwNetPriviewRight; // 网络观看权限
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
public string csServerDes;
}
// 函数声明:
[DllImport("JBNVSDK.dll", CharSet = CharSet.Ansi)]
public extern static JBNV_ErrorCode JBNV_GetServerInfo(IntPtr hServer, ref JBNV_ServerInfo serverInfo);
// 函数调用:
JBNV_ServerInfo serverInfo = new JBNV_ServerInfo();
re = JBNV_DLLFuction.JBNV_GetServerInfo(hServer, ref serverInfo);