当前位置:  编程技术>.net/c#/asp.net

c++函数转c#函数示例程序分享

    来源: 互联网  发布时间:2014-10-25

    本文导语:  代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Runtime.InteropServices;using System.Windows.Forms; namespace FDEP{    ///     /// 罗旭成    /// 深证通函数转换    ///     public class ImportDLL    {     ...

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace FDEP
{
    ///
    /// 罗旭成
    /// 深证通函数转换
    ///
    public class ImportDLL
    {
        #region * 常量定义
        //*****************************************************************
        //协议类型常量
        //名称                             定义值     说明
        //MR_PROTOCOLTYPE_MRSTANDAND       0x01      FDEP规定的标识业务协议
        //MR_PROTOCOLTYPE_SELFCUSTOM       0xFF      用户自定义协议类型
        ///
        /// 协议类型常量
        ///
        public const uint MR_PROTOCOLTYPE_MRSTANDAND = 0x01; // SBSP标准业务协议。
        public const uint MR_PROTOCOLTYPE_SELFCUSTOM = 0xFF; // 用户自定义协议类型。
        //*****************************************************************
        //消息标识位常量
        //名称                             定义值     说明
        //MR_MSGFLAG_PERSIST               0x01      持久消息标志,用于可靠传输。目前暂不支持
        //MR_MSGFLAG_COMPRESS              0x02      压缩标志,需进行压缩传输
        ///
        /// 消息标志位常量
        ///

        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        过期绝对时间固定长度
        ///
        /// 消息标志位常量
        ///
        public const int MR_MAXLEN_ADDR = 64; // 用户标识及应用标识的最大长度。
        public const int MR_MAXLEN_PKGID = 64; // 消息包标识的最大长度。
        public const int MR_MAXLEN_USERDATA = 256; // 用户保留数据的最大长度。
        public const int MR_FIXLEN_EXPIREDABSTIME = 20; // 过期绝对时间固定长度。
        //*****************************************************************
        //函数返回错误值
        //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 * 结构体的定义
        ///
        /// 用来表示一条消息的各种属性
        ///
        [StructLayout(LayoutKind.Sequential)]
        public struct STUsgProperty
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
            public string m_szSourceUserID;//MR_MAXLEN_ADDR 源用户标识,以“”结尾的字符串
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
            public string m_szSourceAppID;//MR_MAXLEN_ADDR 源应用标识,以“”结尾的字符串
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
            public string m_szDestUserID;//MR_MAXLEN_ADDR 目的用户标识,以“”结尾的字符串
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_ADDR)]
            public string m_szDestAppID;//MR_MAXLEN_ADDR 目的应用标识,以“”结尾的字符串
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_PKGID)]
            public string m_szPkgID;//MR_MAXLEN_PKGID 消息包的包标识,以“”结尾的字符串,或者由用户调用MrCreatePkgID函数生成,或者为空(即'')
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_PKGID)]
            public string m_szCorrPkgID;//MR_MAXLEN_PKGID 相关包标识,以“”结尾的字符串,供用户自用
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_USERDATA)]
            public string m_szUserData1;//MR_MAXLEN_USERDATA 用户数据1,以“”结尾的字符串,供用户自用
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_MAXLEN_USERDATA)]
            public string m_szUserData2;//MR_MAXLEN_USERDATA 用户数据2,以“”结尾的字符串,供用户自用
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MR_FIXLEN_EXPIREDABSTIME)]
            public string m_szExpiredAbsTime;//MR_FIXLEN_EXPIREDABSTIME 该消息的过期时间,以“”结尾的字符串,格式为“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  用户自定义协议类型
        }

        ///
        /// 用来定义与接入客户端建立连接所需的各种信息
        ///
        [StructLayout(LayoutKind.Sequential)]
        public struct STUConnInfo
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
            public string m_szMRIP;//接入客户端消息路由器的IP地址,以""结尾的字符串,格式为“xxx.xxx.xxx.xxx”
            public UInt16 m_usMRPort;//接入客户端消息路由器的连接端口
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
            public string m_szMRIPBak;//备用消息路由器的IP地址,不设置备用消息路由器时可以为空
            public UInt16 m_usMRPortBak;//备用消息路由器的连接端口,不设置备用消息路由器时可以为0
        }
        #endregion

        #region * 函数的定义
        ///
        /// 定义的回调函数
        ///
        /// 要发送的消息包缓冲区
        /// 缓冲区中的消息包长度
        /// 消息包属性
        /// 供回调函数使用的用户数据
        ///
        [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);


        ///
        /// 1.初始化,获取相关资源,并尝试与接入客户端FDAP建立连接
        ///
        /// 本应用的应用标识[in]
        /// 本应用在接入客服端设置的密码,密码必须与预设的匹配才能继续[in]
        /// 接收到消息包时的回调函数[in]
        /// 接入客户端连接信息[in]
        /// 供回调函数使用的用户数据[in]
        /// NULL 初始化失败 非NULL 初始化成功,返回一个连接句柄,给句柄将作为其他函数调用的参数
        [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);

        ///
        /// 2.初始化,获取相关资源,并尝试与接入客户端FDAP建立连接
        ///
        /// 本应用的用户标识[in]
        /// 本应用的应用标识[in]
        /// 本应用在接入客服端设置的密码,密码必须与预设的匹配才能继续[in]
        /// 接收到消息包时的回调函数[in]
        /// 接入客户端连接信息[in]
        /// 供回调函数使用的用户数据[in]
        /// NULL 初始化失败 非NULL 初始化成功,返回一个连接句柄,给句柄将作为其他函数调用的参数
        [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);

        ///
        /// 3.连接FDAP时的初始化函数。该函数对FDEAPI进行初始化,分配获取相关资源,并尝试与接入客户端建立通信连接
        ///
        /// 函数返回的句柄,该句柄将作为其他函数调用的参数[out]
        /// 本应用的用户标识[in]
        /// 本应用的应用标识[in]
        /// 本应用在接入客户端设置的密码,密码必须与预设的匹配才能继续[in]
        /// 消息包属性[in]
        /// 接收到消息包时的回调函数[in]
        /// 接入客户端连接信息[in]
        /// 供回调函数使用的用户数据[in]
        /// 调用回头函数OnReceive的线程数目[in]
        /// 无
        [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);

        ///
        /// 4.连接FDAP时的初始化函数。该函数对FDEAPI进行初始化,分配获取相关资源,并尝试与接入客户端建立通信连接
        ///
        /// 函数返回的句柄,该句柄将作为其他函数调用的参数[out]
        /// 本应用的应用标识[in]
        /// 本应用在接入客户端设置的密码,密码必须与预设的匹配才能继续[in]
        /// 这是回调函数OnReceive的接收条件,如果不需要任何条件,则可以填NULL[in]
        /// 接收到消息包时的回调函数[in]
        /// 接入客户端连接信息[in]
        /// 供回调函数使用的用户数据[in]
        /// 调用回头函数OnReceive的线程数目
        /// 无
        [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);

        ///
        /// 5.判断与交换中枢的连接是否正常
        ///
        /// 连接句柄,调用MrInit时返回的值
        /// 0不正常 1正常
        [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)

        ///
        /// 6.消息包标识生成函数
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 生成的消息包标识[out]
        /// 0 成功 其他 失败
        [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])

        ///
        /// 7.消息包发送函数
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 要发送的消息包缓冲区[in]
        /// 缓冲区中的消息包长度[in]
        /// 消息包属性[in/out]
        /// 以毫米为单位的接收最大超时时间[in]
        /// 0 成功 其他 失败
        [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);

        ///
        /// 8.消息包接收函数1
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 双指针,返回包所指向的内存[out]
        /// 接收到消息包的实际长度[out]
        /// 接收条件[in/out]
        /// 以毫米为单位的接收最大超时时间[in]
        /// 0 成功 其他 失败
        [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);

        ///
        /// 9.消息包内存释放函数
        ///
        /// 由MrReceivel1函数的第二个参数返回的指针[in]
        /// 无
        [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);

        ///
        /// 10.消息包浏览函数
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 接收到消息包的实际长度[out]
        /// 接收条件[in/out]
        /// 以毫米为单位的接收最大超时时间[in]
        /// 0 成功 其他 失败
        [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);

        ///
        /// 11.消息包接收函数2
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 双指针,返回包所指向的内存[out]
        /// 接收到消息包的实际长度[out]
        /// 消息包缓冲区大小[out]
        /// 接收条件[in/out]
        /// 以毫米为单位的接收最大超时时间[in]
        /// 0 成功 其他 失败
        [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);

        ///
        /// 12.消息包接收函数3
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 双指针,返回包所指向的内存[out]
        /// 接收到消息包的实际长度[out]
        /// 交换错误的原因码[out]
        /// 接收条件[in/out]
        /// 以毫米为单位的接收最大超时时间[in]
        /// 0 成功 其他 失败
        [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);

        ///
        /// 13.消息包接收函数4
        ///
        /// 连接句柄,调用MrInit时返回的值[in]
        /// 双指针,返回包所指向的内存[out]
        /// 接收到消息包的实际长度[out]
        /// 交换错误的原因码[out]
        /// 接收条件[in/out]
        /// 以毫米为单位的接收最大超时时间[in]
        /// 0 成功 其他 失败
        [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);

        ///
        /// 14.释放资源
        ///
        /// 连接句柄,调用MrInit时返回的值
        /// 无
        [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)

        ///
        /// 15.取得本API的版本号
        ///
        /// 返回的版本号
        /// 版本号长度
        /// 无
        [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);

        ///
        /// 16.注册包下推条件
        ///
        /// 连接句柄,调用MrInit时返回的值


    
 
 

您可能感兴趣的文章:

  • C++ Maps 成员 key_comp():返回比较元素key的函数
  • 怎么样在C++里调用Fortran函数??????
  • C++ Maps 成员 value_comp():返回比较元素value的函数
  • SOS ,在UNIX下编译C++程序时出现链接错误:未下义的符号,但函数库里有这些函数,不知道为什么?
  • C++ MultiMaps 成员 key_comp():返回比较key的函数
  • 求linux C++的时间相关函数及用法,急用,谢谢
  • C++ MultiMaps 成员 value_comp():返回比较元素value的函数
  • C++ 函数编程库 FC++
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • C++ 程序中,如何增加c函数?
  • Linux c++虚函数(virtual function)简单用法示例代码
  • C++中虚拟函数表的问题
  • C++ STL Bitsets构造函数及成员函数解释及代码示例
  • linux下编译c++程序,系统头文件中包含的函数的定义源代码可以查看吗?
  • c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
  • Linux中的共享库难道只能导出函数,而不能导出C++类吗?
  • c++断言assert()函数的头文件及其用法详解
  • 常用C++函数库 Libretta
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • C++空类默认函数详细解析
  • C++ STL库中priority_queue介绍,成员函数说明及priority_queue具体用法举例
  • 如何在C程序中调用C++中的函数
  • C#私有构造函数的简单例子
  • C#类的学习笔记之C#构造函数
  • 学习C#中的静态构造函数与复制构造函数
  • C# 静态构造函数使用总结
  • C#实现关闭显示器的函数一例
  • C#学习笔记之抽象类和抽象函数
  • C#生成MD5的函数代码
  • 如何在C程序中调用C++中的函数 iis7站长之家
  • C#私有构造函数使用示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • 请问:定义了2个函数,其中第一个函数要访问另外一个函数的变量,怎么处理阿?谢谢
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • 如果知道一个函数的地址或函数名,如何得到函数所在的文件名?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • java的数学函数在那个类中,如幂函数、指数、对数、双曲线函数等?
  • cityhash 32位,64位和128位介绍及函数列表
  • 一个父类的构造函数的参数是(Applet applet),请问它的子类构造函数当中应怎样调用父类构造函数?
  • PHP的substr() 函数用法
  • 虚函数被类的构造析构函数和成员函数调用虚函数的执行过程
  • linux c下利用srand和rand函数生成随机字符串
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • Python类的构造函数,析构函数以及垃圾回收机制详细介绍及代码举例
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • Linux下c基于openssl生成MD5的函数
  • 一个静态库包含多个函数,应用程序连接了库中的某个函数,应用程序目标代码中是否还包含了该静态库中的其他函数代码?
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • js的众多函数令小弟实在搞不清楚!哪有函数速查手册之类的软件或者书籍!谢了!比如,setInterval、clearInterval这两个函数是干什么的?
  • 哈希函数的构造方法及举例
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3