API说明如下:   
  1动态库接口函数调用说明   
  动态链接库包含smgpapi.dll、smgpapi.lib、smgpapi.h三个文件   
    
  使用动态链接库smgpapi.dll,按照如下步骤:   
  1. 应用程序调用InitSMGPAPI函数用来注册通讯。   
  2. 注册成功后,应用程序调用SMGPSendLogin函数向网关发送登录消息。另外,应用程序若想终止与外界的通讯,应用程序调用SMGPExitMsg函数发送注销登录消息。   
  3. 应用程序调用SMGPSendSingle向一个用户发送Submit消息。一般来说,应用程序收到自己所发消息的响应。   
  4. 应用程序调用SMGPSendBatch向多个用户发送Submit消息。一般来说,应用程序收到自己所发消息的响应。   
  5. 应用程序调用SMGPDeliver函数接收网关发送来的Deliver消息消息。   
  6. 应用程序调用SMGPActiveTest函数测试与网关之间的链路。   
  7. 应用程序调用SMGPSendBatchResp函数查询SMGPSendBatch函数发出消息的响应。   
  8. 应用程序调用SMGPRecvSNReport函数查询发送消息的状态报告。   
  9. 应用程序在处理完收到的消息后,必须调用CloseSMGPAPI释放内存。   
  2动态库接口原型函数   
  1、BYTE   InitSMGPAPI(   char   SiniFile[],   HWND   hWnd,   HINSTANCE   hInstance   );   
  2、BYTE   SMGPSendLogin(   char   ClientID[],   char   Password[],   WORD   *pwSendErr,   DWORD   *pdwStatus,   WORD   *pwRecvErr   );   
  3、BYTE   SMGPSendSingle(   SMGPSendSingle_T   *ptSMGPSendSingle,   WORD   *pwSendErr,   WORD   *pwRecvErr   );   
  4、BYTE   SMGPSendBatch(   SMGPSendBatch_T   *ptSMGPSendBatch,   WORD   *pwSendErr,   WORD   *pwRecvErr   );   
  5、BYTE   GetSendBatchResp(   SendBatchResp_T   *ptSendBatchResp,   long   nPos,   char   sMsgIDFile[],   BOOL   *pblFileEnd   );   
  6、BYTE   SMGPDeliver(   SMGPDeliverReq_T   *ptSMGPDeliverReq,   WORD   *pwSendErr   );   
  7、BYTE   SMGPRecvSMReport(   IsReport_T   *ptIsReport,   long   nPos,   BOOL   *pblFileEnd   );   
  8、BYTE   SMGPActiveTest(   SMGPActiveTest_T   *ptSMGPActiveTest   );   
  9、BYTE   SMGPExitMsg();   
  10、void   CloseSMGPAPI();   
  3动态库接口函数说明   
  (1)   BYTE   InitSMGPAPI(   char   SiniFile[],   HWND   hWnd,   HINSTANCE   hInstance   )   
  功   能:   应用程序(   进程   )刚启动时,   都必须首先用此函数进行通信初始化。   
          返   回:   成   功   返   回   0   
                        失   败   返   回   1   
  输   入:hWnd   ----   应用程序的窗口句柄。   
                HInstance   ----   应用程序的实例。   
                SiniFile。----   配置文件名称和路径   
              
  (2)   BYTE   SMGPSendLogin(   char   ClientID[],   char   Password[],   WORD   *pwSendErr,   DWORD   *pdwStatus,   WORD   *pwRecvErr   )   
          功   能:应用程序调用此函数发送Login消息。   
          返   回:成   功   返   回   0   
                        失   败   返   回   1   
          输   入:ClientID     ----   CP接入号。                                       
                        Password     ----   CP接入密码。   
  输   出:*pwSendErr   ----   返回发送时的错误码。   
        *pdwStatus   ----   登录响应状态。   
                        *pwRecvErr   ----   返回接收时的错误码。   
                          
  (3)   BYTE   SMGPSendSingle(   SMGPSendSingle_T   *ptSMGPSendSingle,   WORD   *pwSendErr,   WORD   *pwRecvErr   )   
          功   能:应用程序调用此函数向一个目的用户发送Submit消息。   
          返   回:成   功   返   回   0   
                        失   败   返   回   1   
          输   入:*ptSMGPSendSingle     ----   Sumit消息所需的发送信息,见消息体说明。   
  输   出:*pwSendErr   ----   返回发送时的错误码。   
                        *pwRecvErr   ----   返回接收时的错误码。   
    
  (4)   BYTE   SMGPSendBatch(   SMGPSendBatch_T   *ptSMGPSendBatch,   WORD   *pwSendErr,   WORD   *pwRecvErr   )   
  功   能:应用程序调用此函数向一个目的用户发送Submit消息。   
          返   回:成   功   返   回   0   
                        失   败   返   回   1   
          输   入:*ptSMGPSendBatch   ----   Sumit消息所需的发送信息,见消息体说明。   
  输   出:*pwSendErr   ----   返回发送时的错误码。   
                        *pwRecvErr   ----   返回接收时的错误码。   
    
  (5)   BYTE   GetSendBatchResp(   SendBatchResp_T   *ptSendBatchResp,   long   nPos,   char   sMsgIDFile[],   BOOL   *pblFileEnd   )   
  功   能:应用程序调用此函数获得群发消息的响应信息。   
          返   回:成   功   返   回   0   
                        失   败   返   回   1   
          输   入:nPos   ----消息体在文件中的位置,0表示第一条消息,1表示第二条消息…。   
          sMsgIDFile   ----   存放MsgID的文件名。   
          输   出:*ptSendBatchResp   ----响应消息体,见消息体说明。   
          *pblFileEnd   ----   返回文件是否结束,FALSE表示未结束,TRUE表示结束   
          注意:存放MsgID的文件最多只能存放100条消息响应。(即nPos值为0-99)   
  (6)   BYTE   SMGPDeliver(   SMGPDeliverReq_T   *ptSMGPDeliverReq,   WORD   *pwSendErr   )   
  功   能:应用程序调用此函数获得群发消息的响应信息。   
          返   回:成   功   返   回   0   
                        失   败   返   回   1   
          输   出:*ptSMGPDeliverReq   ----Deliver消息消息体,见消息体说明。   
          *pwSendErr   ----   返回发送时的错误码。   
                        *pwRecvErr   ----   返回接收时的错误码。   
    
  (7)   BYTE   SMGPRecvSMReport(   IsReport_T   *ptIsReport,   long   nPos,   BOOL   *pblFileEnd   
  功   能:应用程序调用此函数获得群发消息的响应信息。   
          返   回:成   功   返   回   0   
                        失   败   返   回   1   
          输   入:nPos   ----消息体在文件中的位置,0表示第一条消息,1表示第二条消息…。   
          输   出:*ptIsReport   ----状态报告消息体,见消息体说明。   
          *pblFileEnd   ----   返回文件是否结束,FALSE表示未结束,TRUE表示结束   
          注意:存放状态报告的名为../config/IsReport.dat,若不存在../config目录则不产生状态报告文件,改文件最多只能存放100条消息响应。(即nPos值为0-99)   
    
  (8)   BYTE   SMGPActiveTest(   SMGPActiveTest_T   *ptSMGPActiveTest   )   
          功   能:测试CP和网关之间的链路状态   
          返   回:成功返回   0   
                失败返回   1   
  输   入:*ptSMGPActiveTest   ----   链路测试消息体,见消息体说明。   
    
  (9)   BYTE   SMGPExitMsg()   
          功   能:注销CP接入   
          返   回:成功返回   0   
                失败返回   1   
    
  (10)   CloseSMGPAPI()   
          功   能:释放资源   
          应用程序结束时使用   现求c#代码我把所有分都贡献出来