这篇文章主要为大家展示了“C#回调函数及API应用的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#回调函数及API应用的示例分析”这篇文章吧。
开发环境:WinXP Pro(SP2英文版) + VS.NET 2003中文版
接口库版本: CMPP2.0 API第二版(V2.6)
该例程演示了如何在C#里面调用VC6.0开发的C#回调函数的API应用,而且回调函数的参数包含结构体,使用C#的委托和IntPtr方法实现。
由于我使用C#刚两天,这是我写的***个C#程序,因此例程写的可能有点粗糙,但是编译和运行完全没有问题。
CMPP2.0的API应用封装成了标准C调用的方法,提供以下三个接口,使用的时候只要有CMPPAPI.dll就可以了。
在C#里面如何调用API应用,如何声明结构体,如何使用委托实现C#回调函数,如何实现使用自定义结构体作为参数的C#回调函数,请仔细查看例程源码。注意:CMPPAPI.dll要和可执行文件放到同一个目录下,或者放到可执行文件能找到的目录,或者放到系统目录下(如:C:/windows/system32)。
下面是C#下面的完整的调用代码
//Class1.cs using System; // 该名称空间包含了在Visual C#中调用API的一些必要集合 using System.Runtime.InteropServices; // 使用Sleep方法需要的命名空间 using System.Threading; namespace CMPPAPI_Sample_CSharp { [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_HEAD { public uint nTotalLength; public uint nCommandId; public uint nSeqId; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_CONNECT { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)] public string sSourceAddr; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string sAuthSource; public byte cVersion; public uint nTimeStamp; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_CONNECT_RESP { public byte uchStatus; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string sAuthISMG; public byte cVersion; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_SUBMIT_RESP { public long nMsgid; public byte uchResult; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_STATUS_REPORT { public long nMsgid; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)] public string sStat; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string sSubmitTime; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string sDoneTime; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)] public string sDestTerminalId; public uint nSmscSeq; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_MO_MSGCONTENT { [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 160)] public string sMsgcontent; public CMPP_STATUS_REPORT csr; } [StructLayout(LayoutKind.Sequential, Pack = 1)] public struct CMPP_DELIVER { public long nMsgid; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)] public string sDestid; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string sServiceid; public byte uchTppid; public byte uchTpudhi; public byte uchMsgfmt; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)] public string sSrcterminalid; public byte uchRegisteredDelivery; public byte uchMsglength; public CMPP_MO_MSGCONTENT mo_msg; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)] public string sReserved; }
以上是“C#回调函数及API应用的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/230561.html