using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms; namespace FDEP
{
/// <summary>
/// 罗旭成
/// 深证通函数转换
/// </summary>
public class ImportDLL
{
#region * 常量定义
//*****************************************************************
//协议类型常量
//名称 定义值 说明
//MR_PROTOCOLTYPE_MRSTANDAND 0x01 FDEP规定的标识业务协议
//MR_PROTOCOLTYPE_SELFCUSTOM 0xFF 用户自定义协议类型
/// <summary>
/// 协议类型常量
/// </summary>
public const uint MR_PROTOCOLTYPE_MRSTANDAND = 0x01; // SBSP标准业务协议。
public const uint MR_PROTOCOLTYPE_SELFCUSTOM = 0xFF; // 用户自定义协议类型。
//*****************************************************************
//消息标识位常量
//名称 定义值 说明
//MR_MSGFLAG_PERSIST 0x01 持久消息标志,用于可靠传输。目前暂不支持
//MR_MSGFLAG_COMPRESS 0x02 压缩标志,需进行压缩传输
/// <summary>
/// 消息标志位常量
/// </summary> public const uint MR_MSGFLAG_PERSIST = 0x01; // 持久消息标志,用于可靠传输。
public const uint MR_MSGFLAG_COMPRESS = 0x02; // 压缩标志,需进行压缩传输。
//*****************************************************************
//长度常量
//名称 定义值 说明
//MR_MAXLEN_ADDR 64 用户标识及应用标识的最大长度
//MR_MAXLEN_PKGID 64 消息包标识的最大长度
//MR_MAXLEN_USERDATA 256 用户保留数据的最大长度
//MR_FIXLEN_EXPIREDABSTIME 20 过期绝对时间固定长度
/// <summary>
/// 消息标志位常量
/// </summary>
public const int MR_MAXLEN_ADDR = ; // 用户标识及应用标识的最大长度。
public const int MR_MAXLEN_PKGID = ; // 消息包标识的最大长度。
public const int MR_MAXLEN_USERDATA = ; // 用户保留数据的最大长度。
public const int MR_FIXLEN_EXPIREDABSTIME = ; // 过期绝对时间固定长度。
//*****************************************************************
//函数返回错误值
//MR_ERRCODE_OK 0
//MR_ERRCODE_PARAMERR -1
//MR_ERRCODE_CONNERR -2
//MR_ERRCODE_TIMEEXPIRED -3
//MR_ERRCODE_TIMEOUT -4
//MR_ERRCODE_NOMSG -5
//MR_ERRCODE_BUFTOOSHORT -6
//MR_ERRCODE_BUFTOOBIG -7
//MR_ERRCODE_SYSERROR -8
#endregion #region * 结构体的定义
/// <summary>
/// 用来表示一条消息的各种属性
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct STUsgProperty
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
public string m_szSourceUserID;//MR_MAXLEN_ADDR 源用户标识,以“\0”结尾的字符串
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
public string m_szSourceAppID;//MR_MAXLEN_ADDR 源应用标识,以“\0”结尾的字符串
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
public string m_szDestUserID;//MR_MAXLEN_ADDR 目的用户标识,以“\0”结尾的字符串
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
public string m_szDestAppID;//MR_MAXLEN_ADDR 目的应用标识,以“\0”结尾的字符串
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_PKGID)]
public string m_szPkgID;//MR_MAXLEN_PKGID 消息包的包标识,以“\0”结尾的字符串,或者由用户调用MrCreatePkgID函数生成,或者为空(即'\0')
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_PKGID)]
public string m_szCorrPkgID;//MR_MAXLEN_PKGID 相关包标识,以“\0”结尾的字符串,供用户自用
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_USERDATA)]
public string m_szUserData1;//MR_MAXLEN_USERDATA 用户数据1,以“\0”结尾的字符串,供用户自用
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_USERDATA)]
public string m_szUserData2;//MR_MAXLEN_USERDATA 用户数据2,以“\0”结尾的字符串,供用户自用
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_FIXLEN_EXPIREDABSTIME)]
public string m_szExpiredAbsTime;//MR_FIXLEN_EXPIREDABSTIME 该消息的过期时间,以“\0”结尾的字符串,格式为“YYYY-MM-DD HH:MM:SS”。也可以置空,此时如果目的用户不在线,或者目的应用未连接,则消息立即过期。
public byte m_ucFlag;//消息标识,有8个二进制位组成,各位含义如下:位0 --为1表示持久消息,需可靠传输,暂不支持;
//位1 --为1表示消息需压缩传输
public byte m_ucProtocolType;//协议类型标识,取值可以是下列之一:MR_PROTOCOLTYPE_MRSTANDAND 0x01 FDEP规定的标准业务协议
//MR_PROTOCOLTYPE_SELFCUSTOM 0xFF 用户自定义协议类型
} /// <summary>
/// 用来定义与接入客户端建立连接所需的各种信息
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct STUConnInfo
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = )]
public string m_szMRIP;//接入客户端消息路由器的IP地址,以"\0"结尾的字符串,格式为“xxx.xxx.xxx.xxx”
public UInt16 m_usMRPort;//接入客户端消息路由器的连接端口
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = )]
public string m_szMRIPBak;//备用消息路由器的IP地址,不设置备用消息路由器时可以为空
public UInt16 m_usMRPortBak;//备用消息路由器的连接端口,不设置备用消息路由器时可以为0
}
#endregion #region * 函数的定义
/// <summary>
/// 定义的回调函数
/// </summary>
/// <param name="psPkg">要发送的消息包缓冲区</param>
/// <param name="iPkgLen">缓冲区中的消息包长度</param>
/// <param name="pMsgPropery">消息包属性</param>
/// <param name="pvUserData">供回调函数使用的用户数据</param>
/// <returns></returns>
[UnmanagedFunctionPointerAttribute(CallingConvention.StdCall)]
public delegate int OnReceiveCallBack(string psPkg, int iPkgLen, ref STUsgProperty pMsgPropery, IntPtr pvUserData);
//typedef int (*OnReceiveCallBack)(const char* psPkg, int iPkgLen, const STUMsgProperty* pMsgPropery, void* pvUserData); /// <summary>
/// 1.初始化,获取相关资源,并尝试与接入客户端FDAP建立连接
/// </summary>
/// <param name="psAppID">本应用的应用标识</param>[in]
/// <param name="psPasswd">本应用在接入客服端设置的密码,密码必须与预设的匹配才能继续</param>[in]
/// <param name="onReceive">接收到消息包时的回调函数</param>[in]
/// <param name="oConnInfo">接入客户端连接信息</param>[in]
/// <param name="pvUserData">供回调函数使用的用户数据</param>[in]
/// <returns>NULL 初始化失败 非NULL 初始化成功,返回一个连接句柄,给句柄将作为其他函数调用的参数</returns>
[DllImport("mrapi.dll", EntryPoint = "MrInit", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr MrInit(string psAppID, string psPasswd, OnReceiveCallBack onReceive, STUConnInfo oConnInfo, IntPtr pvUserData);
//void* _stdcall MrInit(const char* psAppID, const char* psAppPasswd,OnReceiveCallBack onReceive,const STUConnInfo oConnInfo, void* pvUserData); /// <summary>
/// 2.初始化,获取相关资源,并尝试与接入客户端FDAP建立连接
/// </summary>
/// <param name="psUserCertID">本应用的用户标识</param>[in]
/// <param name="psAppID">本应用的应用标识</param>[in]
/// <param name="psPasswd">本应用在接入客服端设置的密码,密码必须与预设的匹配才能继续</param>[in]
/// <param name="onReceive">接收到消息包时的回调函数</param>[in]
/// <param name="oConnInfo">接入客户端连接信息</param>[in]
/// <param name="pvUserData">供回调函数使用的用户数据</param>[in]
/// <returns>NULL 初始化失败 非NULL 初始化成功,返回一个连接句柄,给句柄将作为其他函数调用的参数</returns>
[DllImport("mrapi.dll", EntryPoint = "MrInit1", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr MrInit1(string psUserCertID, string psAppID, string psPasswd, OnReceiveCallBack onReceive, STUConnInfo oConnInfo, IntPtr pvUserData); /// <summary>
/// 3.连接FDAP时的初始化函数。该函数对FDEAPI进行初始化,分配获取相关资源,并尝试与接入客户端建立通信连接
/// </summary>
/// <param name="pHandle">函数返回的句柄,该句柄将作为其他函数调用的参数</param>[out]
/// <param name="psUserCertID">本应用的用户标识</param>[in]
/// <param name="psAppID">本应用的应用标识</param>[in]
/// <param name="psPasswd">本应用在接入客户端设置的密码,密码必须与预设的匹配才能继续</param>[in]
/// <param name="pMsgProperty">消息包属性</param>[in]
/// <param name="onReceive">接收到消息包时的回调函数</param>[in]
/// <param name="oConnInfo">接入客户端连接信息</param>[in]
/// <param name="pvUserData">供回调函数使用的用户数据</param>[in]
/// <param name="iThreadCount">调用回头函数OnReceive的线程数目</param>[in]
/// <returns>无</returns>
[DllImport("mrapi.dll", EntryPoint = "MrInit1Ex1", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr MrInit1Ex1(out IntPtr pHandle, string psUserCertID, string psAppID, string psPasswd, ref STUsgProperty pMsgProperty, OnReceiveCallBack onReceive, STUConnInfo oConnInfo, IntPtr pvUserData, int iThreadCount); /// <summary>
/// 4.连接FDAP时的初始化函数。该函数对FDEAPI进行初始化,分配获取相关资源,并尝试与接入客户端建立通信连接
/// </summary>
/// <param name="pHandle">函数返回的句柄,该句柄将作为其他函数调用的参数</param>[out]
/// <param name="psAppID">本应用的应用标识</param>[in]
/// <param name="psPassws">本应用在接入客户端设置的密码,密码必须与预设的匹配才能继续</param>[in]
/// <param name="pOnRecvMsgPropery">这是回调函数OnReceive的接收条件,如果不需要任何条件,则可以填NULL</param>[in]
/// <param name="onReceive">接收到消息包时的回调函数</param>[in]
/// <param name="pConnInfo">接入客户端连接信息</param>[in]
/// <param name="pvUserData">供回调函数使用的用户数据</param>[in]
/// <param name="iThreadCount">调用回头函数OnReceive的线程数目</param>
/// <returns>无</returns>
[DllImport("mrapi.dll", EntryPoint = "MrInit2", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr MrInit2(out IntPtr pHandle, string psAppID, string psPassws, ref STUsgProperty pOnRecvMsgPropery, OnReceiveCallBack onReceive, ref STUConnInfo pConnInfo, IntPtr pvUserData, int iThreadCount);
//void* _stdcall MrInit2(void** ppHandle, const char* psAppID, const char* psAppPasswd, STUMsgProperty* pOnRecvMsgPropery,OnReceiveCallBack onReceive,const STUConnInfo* pConnInfo, void* pvUserData, int iThreadCount); /// <summary>
/// 5.判断与交换中枢的连接是否正常
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>
/// <returns>0不正常 1正常</returns>
[DllImport("mrapi.dll", EntryPoint = "MrIsLinkOK", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrIsLinkOK(IntPtr pHandle);
//int _stdcall MrIsLinkOK(void* pHandle) /// <summary>
/// 6.消息包标识生成函数
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="szPkgID">生成的消息包标识</param>[out]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrCreatePkgID", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrCreatePkgID(IntPtr pHandle, StringBuilder szPkgID);
//int _stdcall MrCreatePkgID(void* pHandle,char szPkgID[MR_MAXLEN_PKGID]) /// <summary>
/// 7.消息包发送函数
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="psPkg">要发送的消息包缓冲区</param>[in]
/// <param name="iPkgLen">缓冲区中的消息包长度</param>[in]
/// <param name="pMsgPropery">消息包属性</param>[in/out]
/// <param name="iMillSecTimeo">以毫米为单位的接收最大超时时间</param>[in]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrSend", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrSend(IntPtr pHandle, string psPkg, int iPkgLen, ref STUsgProperty pMsgPropery, int iMillSecTimeo);
//int _stdcall MrSend(void* pHandle,const char* psPkg,int iPkgLen,STUsgProperty* pMsgPropery,int iMillSecTimeo); /// <summary>
/// 8.消息包接收函数1
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="ppsPkg">双指针,返回包所指向的内存</param>[out]
/// <param name="piOutPkgLen">接收到消息包的实际长度</param>[out]
/// <param name="pMsgPropery">接收条件</param>[in/out]
/// <param name="iMillSecTimeo">以毫米为单位的接收最大超时时间</param>[in]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrReceive1", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrReceive1(IntPtr pHandle, out IntPtr ppsPkg, out int piOutPkgLen, ref STUsgProperty pMsgPropery, int iMillSecTimeo);
//int _stdcall MrReceive1(void* pHandle, char** ppsPkg, int* piOutPkgLen, STUMsgProperty* pMsgPropery, int iMillSecTimeo); /// <summary>
/// 9.消息包内存释放函数
/// </summary>
/// <param name="psPkg">由MrReceivel1函数的第二个参数返回的指针</param>[in]
/// <returns>无</returns>
[DllImport("mrapi.dll", EntryPoint = "MrReceive1_FreeBuf", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr MrReceive1_FreeBuf(string psPkg);
//void _stdcall MrReceive1_FreeBuf(char* psPkg); /// <summary>
/// 10.消息包浏览函数
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="piOutPkgLen">接收到消息包的实际长度</param>[out]
/// <param name="pMsgPropery">接收条件</param>[in/out]
/// <param name="iMillSecTimeo">以毫米为单位的接收最大超时时间</param>[in]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrBrowse", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrBrowse(IntPtr pHandle, out int piOutPkgLen, ref STUsgProperty pMsgPropery, int iMillSecTimeo);
//int _stdcall MrBrowse(void* pHandle, int* piOutPkgLen, STUMsgProperty* pMsgPropery, int iMillSecTimeo); /// <summary>
/// 11.消息包接收函数2
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="ppsPkg">双指针,返回包所指向的内存</param>[out]
/// <param name="piOutPkgLen">接收到消息包的实际长度</param>[out]
/// <param name="iBufLenIn">消息包缓冲区大小</param>[out]
/// <param name="pMsgPropery">接收条件</param>[in/out]
/// <param name="iMillSecTimeo">以毫米为单位的接收最大超时时间</param>[in]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrReceive2", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrReceive2(IntPtr pHandle, out IntPtr ppsPkg, out int piOutPkgLen, out int iBufLenIn, ref STUsgProperty pMsgPropery, int iMillSecTimeo);
//int _stdcall MrReceive2(void* pHandle, char** ppsPkg, int* piOutPkgLen, int* iBufLenIn, STUMsgProperty* pMsgPropery, int iMillSecTimeo); /// <summary>
/// 12.消息包接收函数3
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="ppsPkg">双指针,返回包所指向的内存</param>[out]
/// <param name="piOutPkgLen">接收到消息包的实际长度</param>[out]
/// <param name="piErrSXCode">交换错误的原因码</param>[out]
/// <param name="pMsgPropery">接收条件</param>[in/out]
/// <param name="iMillSecTimeo">以毫米为单位的接收最大超时时间</param>[in]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrReceive3", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrReceive3(IntPtr pHandle, out IntPtr ppsPkg, out int piOutPkgLen, out int piErrSXCode, ref STUsgProperty pMsgPropery, int iMillSecTimeo);
//int _stdcall MrReceive3(void* pHandle, char** ppsPkg, int* piOutPkgLen, int* piErrSXCode, STUMsgProperty* pMsgPropery, int iMillSecTimeo); /// <summary>
/// 13.消息包接收函数4
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>[in]
/// <param name="ppsPkg">双指针,返回包所指向的内存</param>[out]
/// <param name="piOutPkgLen">接收到消息包的实际长度</param>[out]
/// <param name="piErrSXCode">交换错误的原因码</param>[out]
/// <param name="pMsgPropery">接收条件</param>[in/out]
/// <param name="iMillSecTimeo">以毫米为单位的接收最大超时时间</param>[in]
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrReceive4", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrReceive4(IntPtr pHandle, out IntPtr ppsPkg, out int piOutPkgLen, out int piErrSXCode, ref STUsgProperty pMsgPropery, int iMillSecTimeo);
//int _stdcall MrReceive4(void* pHandle, char** ppsPkg, int* piOutPkgLen, int* piErrSXCode, STUMsgProperty* pMsgPropery, int iMillSecTimeo); /// <summary>
/// 14.释放资源
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值</param>
/// <returns>无</returns>
[DllImport("mrapi.dll", EntryPoint = "MrDestroy", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern IntPtr MrDestroy(IntPtr pHandle);
//void _stdcall MrDestroy(void* pHandle) /// <summary>
/// 15.取得本API的版本号
/// </summary>
/// <param name="psBufVersion">返回的版本号</param>
/// <param name="iBufLen">版本号长度</param>
/// <returns>无</returns>
[DllImport("mrapi.dll", EntryPoint = "MrGetVersion", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
public static extern IntPtr MrGetVersion(StringBuilder psBufVersion, int iBufLen);
//void _stdcall MrGetVersion(char* psBufVersion,int iBufLen); /// <summary>
/// 16.注册包下推条件
/// </summary>
/// <param name="pHandle">连接句柄,调用MrInit时返回的值<</param>
/// <param name="pMsgPropery">消息的结构实体</param>
/// <param name="iType">0 增加一个条件 1 删除一个条件 2 清空所有条件</param>
/// <returns>0 成功 其他 失败</returns>
[DllImport("mrapi.dll", EntryPoint = "MrRegRecvCondition", CallingConvention = CallingConvention.StdCall, SetLastError = true, CharSet = CharSet.Ansi)]
public static extern int MrRegRecvCondition(IntPtr pHandle, ref STUsgProperty pMsgPropery, int iType);
//int _stdcall MrRegRecvCondition(void* pHandle,STUMsgProperty* pMsgPropery,int iType);
#endregion
}
}

C++转C#函数事例的更多相关文章

  1. PRO*C 函数事例 3 -- 游标使用

    1.Oracle中的游标    Oracle使用两种游标: 显式游标和隐式游标. 不管语句返回多少条记录, Oracle为每条使用的SQL语句隐式地定义一个游标. Oracle为每个DELETE , ...

  2. PRO*C 函数事例 2 -- 数据库操作

    Pro*C Oracle 的嵌入式开发,数据库处理部分最好能提取到一个模块,按照对不同数据库表的操作分成不同的.pc文件(如 DbsInstStat.pc).将此模块编译成库(c文件编译时链接此库), ...

  3. PRO*C 函数事例 1 -- 数据库连接、事务处理

    1.程序结构        每一个Pro*C程序都包括两部分:(1)应用程序首部:(2)应用程序体        应用程序首部定义了ORACLE数据库的有关变量, 为在C语言中操纵ORACLE数据库做 ...

  4. 【shell--批量远程MySQL,执行命令】-【工作总结】

    昨天下班前,老板给了一批LOG数据库IP地址,需要统计LOG表里Message字段top 10的结果,并输出到一个excel文件里.抽查看了下,有两种格式的以当天日期结尾的表名.由于数量太多,时间紧迫 ...

  5. 系统封装接口层 cmsis_os

    在这个实时操作系统泛滥的年代,有这么一个系统封装接口层还是蛮有必要的.前些时间偶然间在STM32最新的固件库中就发现了这个系统封装接口,当时就把自己所用的系统进行封装.直到最近KEIL5.0发现其中所 ...

  6. Qt 多线程 详细函数说明及其事例

    转:http://www.cnblogs.com/hicjiajia/archive/2011/02/03/1948955.html Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了 ...

  7. 异步函数封装请确保异步性(Javascript需要养成的良好习惯)

    背景假设: 你有许多的配置信息存放在服务器上,因为配置太多,不希望每次都把所有的配置信息都写到前端,希望能需要用的时候再获取就好了. 因为Javascript单线程运行,你不希望堵塞ui渲染于是你专门 ...

  8. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  9. Winform API "user32.dll"中的函数

    命名空间:System.Runtime.InteropServices /// <summary> /// 该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在G ...

随机推荐

  1. CodeForces 667A Pouring Rain

    A. Pouring Rain time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  2. WebBench----简洁优美的网站压力测试工具

    [root@c webbench]# webbench -c 10 -t 20 http://www.baidu.com/Webbench - Simple Web Benchmark 1.5Copy ...

  3. JQuery设置checkbox选中或取消等相关操作

    $("[name='checkbox']").attr("checked",'true');//全选 $("[name='checkbox']&quo ...

  4. python基础之类的封装

    从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,还有alex一起装进麻袋,然后把麻袋封上口子.但其实这种理解相当片面 一 封装什么 你钱包的有多少钱(数据的封装) 你的性取向( ...

  5. 名义人均GDP的背后,中国真实的人均GDP是1.2万美元!(中国GDP含金量较高)

    来源:天涯社区 根据IMF(国际货币基金组织)在今年4月的报告,2014年份中国人均GDP为7600美元,在185个国家当中排行第78位. 然而,根据楼主在国外行走多年的经验,巴西.墨西哥.马来西亚. ...

  6. windows下的Mysql安装与基本使用(zip)

    一.安装过程 Mysql社区版下载地址:http://dev.mysql.com/downloads/mysql/ --注意,已管理员身份运行cmd.exe,很重要!!目录在,c:\windows\s ...

  7. 008-CentOS添加环境变量

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时时, ...

  8. 枢轴点(Pivot Point)系统

    Pivot Point是日内交易方法,非常简单实用,是一套非常“单纯”的阻力支持体系,大概是10年前一个做期货的高手发明的方法,至今已经广泛的用在股票.期货.国债.指数等高成交量的商品上.经典的Piv ...

  9. BFC(Block Formatting Context)基础分析

    W3C官方对于BFC的描述只有3小段,强烈建议想理解BFC的朋友先去看看,链接见文末. 常见的文档流分为:定位流.浮动流.普通流3种.BFC是普通流中的一种. 本文提出3个问题并给出使用BFC来解决这 ...

  10. pandas(五)处理缺失数据和层次化索引

    pandas用浮点值Nan表示浮点和非浮点数组中的缺失数据.它只是一个便于被检测的标记而已. >>> string_data = Series(['aardvark','artich ...