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

开发 后端
本文演示了如何在C#里面调用VC6.0开发的C#回调函数的API应用,而且回调函数的参数包含结构体,使用C#的委托和IntPtr方法实现。

开发环境: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#下面的完整的调用代码

  1. //Class1.cs  
  2.  
  3. using System;  
  4. // 该名称空间包含了在Visual C#中调用API的一些必要集合  
  5. using System.Runtime.InteropServices;  
  6. // 使用Sleep方法需要的命名空间  
  7. using System.Threading;  
  8.  
  9. namespace CMPPAPI_Sample_CSharp  
  10. {  
  11.  
  12. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  13. public struct CMPP_HEAD  
  14. {  
  15. public uint nTotalLength;  
  16. public uint nCommandId;  
  17. public uint nSeqId;  
  18. }  
  19.  
  20. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  21. public struct CMPP_CONNECT  
  22. {  
  23. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]  
  24. public string sSourceAddr;  
  25. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]  
  26. public string sAuthSource;  
  27. public byte cVersion;  
  28. public uint nTimeStamp;  
  29. }  
  30.  
  31. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  32. public struct CMPP_CONNECT_RESP  
  33. {  
  34. public byte uchStatus;  
  35. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]  
  36. public string sAuthISMG;  
  37. public byte cVersion;  
  38. }  
  39.  
  40. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  41. public struct CMPP_SUBMIT_RESP  
  42. {  
  43. public long nMsgid;  
  44. public byte uchResult;  
  45. }  
  46.  
  47. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  48. public struct CMPP_STATUS_REPORT  
  49. {  
  50. public long nMsgid;  
  51. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]  
  52. public string sStat;  
  53. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]  
  54. public string sSubmitTime;  
  55. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]  
  56. public string sDoneTime;  
  57. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]  
  58. public string sDestTerminalId;  
  59. public uint nSmscSeq;  
  60. }  
  61.  
  62. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  63. public struct CMPP_MO_MSGCONTENT  
  64. {  
  65. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 160)]  
  66. public string sMsgcontent;  
  67. public CMPP_STATUS_REPORT csr;  
  68. }  
  69.  
  70. [StructLayout(LayoutKind.Sequential, Pack = 1)]  
  71. public struct CMPP_DELIVER  
  72. {  
  73. public long nMsgid;  
  74. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]  
  75. public string sDestid;  
  76. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]  
  77. public string sServiceid;  
  78. public byte uchTppid;  
  79. public byte uchTpudhi;  
  80. public byte uchMsgfmt;  
  81. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]  
  82. public string sSrcterminalid;  
  83. public byte uchRegisteredDelivery;  
  84. public byte uchMsglength;  
  85.  
  86. public CMPP_MO_MSGCONTENT mo_msg;  
  87.  
  88. [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]  
  89. public string sReserved;  

【编辑推荐】

  1. C#在应用程序间发送消息实现浅析
  2. 一些C#时间类型的入门知识
  3. C#接口和抽象类技术特点浅析
  4. 一个C#时间计算的实例
  5. C#继承知识详解
责任编辑:佚名 来源: IT168
相关推荐

2009-08-12 10:11:18

C# 回调函数

2009-08-19 17:10:09

C#回调函数

2009-08-13 13:42:54

C#构造函数

2009-08-27 13:05:06

C#接口特点C#接口实例

2009-08-31 16:37:20

C#接口定义

2009-08-24 11:35:20

C# 泛型应用

2009-07-31 14:03:21

C# Format函数

2009-08-13 18:36:36

C#继承构造函数

2009-08-19 16:40:35

C#回调

2009-08-10 14:43:03

C#函数Convert

2009-07-31 16:00:30

C#函数重载

2009-08-24 15:02:05

C# 类型

2009-08-19 17:38:17

C# 操作符分类

2009-08-28 11:48:32

C#静态函数

2009-08-18 10:30:30

C#枚举

2009-08-14 09:15:28

C#调用构造函数

2009-07-31 15:44:02

C#静态构造函数

2011-06-15 11:05:14

C语言回调函数

2009-07-31 15:22:56

C#判等函数

2009-08-18 10:35:46

C#枚举类型
点赞
收藏

51CTO技术栈公众号