C#回调函数及API应用浅析
1个回答
展开全部
开发环境:WinXP Pro(SP 英文版) + VS NET 中文版
接口库版本: CMPP API第二版(V )
该例程演示了如何在C#里面调用VC 开发的C#回调函数的API应用 而且回调函数的参数包含结构体 使用C#的委托和IntPtr方法实现
由于我使用C#刚两天 这是我写的第一个C#程序 因此例程写的可能有点粗糙 但是编译和运行完全没有问题
CMPP 的API应用封装成了标准C调用的方法 提供以下三个接口 使用的时候只要有CMPPAPI dll就可以了
在C#里面如何调用API应用 如何声明结构体 如何使用委托实现C#回调函数 如何实现使用自定义结构体作为参数的C#回调函数 请仔细查看例程源码 注意:CMPPAPI dll要和可执行文件放到同一个目录下 或者放到可执行文件能找到的目录 或者放到系统目录下(如:C:\windows\system )
下面是C#下面的完整的调用代码
- //Class cs using System; // 该名称空间包含了在Visual C#中调用API的一些必要集合 using System Runtime InteropServices; // 使用Sleep方法需要的命名空间 using System Threading; namespace CMPPAPI_Sample_CSharp { [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_HEAD { public uint nTotalLength; public uint nCommandId; public uint nSeqId; } [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_CONNECT { [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sSourceAddr; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sAuthSource; public byte cVersion; public uint nTimeStamp; } [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_CONNECT_RESP { public byte uchStatus; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sAuthISMG; public byte cVersion; } [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_SUBMIT_RESP { public long nMsgid; public byte uchResult; } [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_STATUS_REPORT { public long nMsgid; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sStat; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sSubmitTime; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sDoneTime; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sDestTerminalId; public uint nSmscSeq; } [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_MO_MSGCONTENT { [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sMsgcontent; public CMPP_STATUS_REPORT csr; } [StructLayout(LayoutKind Sequential Pack = )] public struct CMPP_DELIVER { public long nMsgid; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sDestid; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sServiceid; public byte uchTppid; public byte uchTpudhi; public byte uchMsgfmt; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sSrcterminalid; public byte uchRegisteredDelivery; public byte uchMsglength; public CMPP_MO_MSGCONTENT mo_msg; [MarshalAs(UnmanagedType ByValTStr SizeConst = )] public string sReserved; }
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询