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

 我来答
新科技17
2022-10-11 · TA获得超过5897个赞
知道小有建树答主
回答量:355
采纳率:100%
帮助的人:74.5万
展开全部

  开发环境: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;  } 
lishixinzhi/Article/program/net/201311/12324

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式