该例程演示了C#调用API函数,而且回调函数的参数包含结构体,使用C#的委托和IntPtr方法实现.由于我使用C#刚两天,这是我写的***个C#程序,因此例程写的可能有点粗糙,但是编译和运行完全没有问题.CMPP2.0的API封装成了标准C调用API的方法,提供以下三个接口,使用的时候只要有CMPPAPI.dll就可以了.
创新互联成立与2013年,是专业互联网技术服务公司,拥有项目成都网站制作、网站设计、外贸网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元湾里做网站,已为上家服务,为湾里各地企业和个人服务,联系电话:028-86922220
- #define DllExport extern "C" __declspec(dllexport)
- DllExport int __stdcall Cmpp2Start(LPCTSTR pchSmgIp
- int nMtPort
- int nMoPort
- LPCTSTR pchUserName
- LPCTSTR pchUserPwd
- unsigned char uchVersion
- void (__stdcall *OnSmgMsg)(CMPP_SMGTOSP* css)
- int nConnType
- void (__stdcall *OnLogFile)(LPCTSTR str));
- DllExport int __stdcall Cmpp2Submit(
- unsigned char uchPKtotal
- unsigned char uchPKnumber
- unsigned char uchNeedreport
- unsigned char uchMsglevel
- LPCTSTR pchServiceid
- unsigned char uchFeeusertype
- LPCTSTR pchFeeterminalid
- unsigned char uchTppid
- unsigned char uchTpudhi
- unsigned char uchMsgfmt
- LPCTSTR pchMsgsrc
- LPCTSTR pchFeetype
- LPCTSTR pchFeecode
- LPCTSTR pchValidtime
- LPCTSTR pchAttime
- LPCTSTR pchSrcid
- unsigned char uchDestusrtl
- LPCTSTR pchDestterminalid
- unsigned char uchMsglen
- LPCTSTR pchMsgcontent);
- DllExport int __stdcall Cmpp2Release();
C#调用API,如何声明结构体,如何使用委托实现回调函数,如何实现使用自定义结构体作为参数的回调函数,请仔细查看例程源码。注意:CMPPAPI.dll要和可执行文件放到同一个目录下,或者放到可执行文件能找到的目录,或者放到系统目录下(如:C:\windows \system32).
- //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)]
- publicstruct CMPP_CONNECT_RESP
- {
- public byte uchStatus;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
- public string sAuthISMG;
- public byte cVersion;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_SUBMIT_RESP
- {
- public long nMsgid;
- public byte uchResult;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct 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)]
- publicstruct CMPP_MO_MSGCONTENT
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 160)]
- public string sMsgcontent;
- public CMPP_STATUS_REPORT csr;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_DELIVER
- {
- public longnMsgid;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
- public string sDestid;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
- public string sServiceid;
- public byteuchTppid;
- public byteuchTpudhi;
- public byteuchMsgfmt;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
- public string sSrcterminalid;
- public byteuchRegisteredDelivery;
- public byteuchMsglength;
- public CMPP_MO_MSGCONTENT mo_msg;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
- public string sReserved;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_SUBMIT
- {
- public longnMsgid;
- public byteuchPkTotal;
- public byteuchPkNumber;
- public byteuchRegisteredDelivery;
- public byteuchMsgLevel;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
- public string sServiceId;
- public byteuchFeeUserType;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
- public string sFeeTerminalId;
- public byteuchTpPid;
- public byteuchTpUdhi;
- public byteuchMsgFmt;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
- public string sMsgSrc;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
- public string sFeeType;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 6)]
- public string sFeeCode;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
- public string sValidTime;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)]
- public string sAtTime;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21)]
- public string sSrcId;
- public byte uchDstUsrTl;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 21*100)]
- public string sDstTerminalId;
- public byteuchMsgLength;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 160)]
- public string sMsgContent;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
- public string sReserved;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_QUERY
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
- public string sTime;
- public byte uchQueryType;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
- public string sQueryCode;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
- public string sReserved;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_QUERY_RESP
- {
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
- public string sTime;
- public byte uchQueryType;
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)]
- public string sQueryCode;
- public uint nMTTLMsg;//从SP接收消息总数.
- public uint nMTTLUsr;//从SP接收用户总数.
- public uint nMTScs; //成功转发数量.
- public uint nMTWT; //待转发数量.
- public uint nMTFL; //转发失败数量.
- public uint nMOScs; //向SP成功送达数量.
- public uint nMOWT; //向SP待送达数量.
- public uint nMOFL; //向SP送达失败数量.
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_CANCEL
- {
- public long nMsgid;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_CANCEL_RESP
- {
- public byte uchSuccessId;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_ACTIVETEST_RESP
- {
- public byte uchReserved;
- }
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- publicstruct CMPP_BODY
- {
- public CMPP_CONNECT_RESP pk_connectresp;
- public CMPP_SUBMIT_RESPpk_submitresp;
- public CMPP_QUERY_RESPpk_queryre
以上介绍C#调用API
文章名称:详细介绍C#调用API
标题URL:http://www.gawzjz.com/qtweb2/news19/24619.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联