C#回调函数及API应用浅析

网友投稿 239 2023-05-26

开发环境: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;   1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.81.82.83.84.85.86.87.88.89.90.

【编辑推荐】

C#在应用程序间发送消息实现浅析 一些C#时间类型的入门知识 C#接口和抽象类技术特点浅析 一个C#时间计算的实例 C#继承知识详解

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:APISpace 尾号限行API
下一篇:APISpace 验证码短信API
相关文章

 发表评论

暂时没有评论,来抢沙发吧~