该例程演示了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
                
                本文链接:http://www.csdahua.cn/qtweb/news13/165413.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网