C#回调函数及API应用的示例分析

发布时间:2021-12-01 10:53:50 作者:小新
来源:亿速云 阅读:168

这篇文章主要为大家展示了“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应用的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. c#中位图算法及其应用的示例分析
  2. 函数指针和回调函数的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

api

上一篇:C#接口和抽象类技术特点有哪些

下一篇:C#自定义特性的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》