熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#回調函數及API應用淺析

2013-11-13 10:01:47  來源: .NET編程 

  開發環境:WinXP Pro(SP英文版) + VSNET 中文版

  接口庫版本: CMPP API第二版(V)

  該例程演示了如何在C#裡面調用VC開發的C#回調函數的API應用而且回調函數的參數包含結構體使用C#的委托和IntPtr方法實現

  由於我使用C#剛兩天這是我寫的第一個C#程序因此例程寫的可能有點粗糙但是編譯和運行完全沒有問題

  CMPP的API應用封裝成了標准C調用的方法提供以下三個接口使用的時候只要有CMPPAPIdll就可以了

  在C#裡面如何調用API應用如何聲明結構體如何使用委托實現C#回調函數如何實現使用自定義結構體作為參數的C#回調函數請仔細查看例程源碼注意:CMPPAPIdll要和可執行文件放到同一個目錄下或者放到可執行文件能找到的目錄或者放到系統目錄下(如:C:\windows\system)

  下面是C#下面的完整的調用代碼

  


    //Classcs  
     
    using System;  
    // 該名稱空間包含了在Visual C#中調用API的一些必要集合  
    using SystemRuntimeInteropServices;  
    // 使用Sleep方法需要的命名空間  
    using SystemThreading;  
     
    namespace CMPPAPI_Sample_CSharp  
    {  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_HEAD  
    {  
    public uint nTotalLength;  
    public uint nCommandId;  
    public uint nSeqId;  
    }  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_CONNECT  
    {  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sSourceAddr;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sAuthSource;  
    public byte cVersion;  
    public uint nTimeStamp;  
    }  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_CONNECT_RESP  
    {  
    public byte uchStatus;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sAuthISMG;  
    public byte cVersion;  
    }  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_SUBMIT_RESP  
    {  
    public long nMsgid;  
    public byte uchResult;  
    }  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_STATUS_REPORT  
    {  
    public long nMsgid;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sStat;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sSubmitTime;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sDoneTime;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sDestTerminalId;  
    public uint nSmscSeq;  
    }  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_MO_MSGCONTENT  
    {  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sMsgcontent;  
    public CMPP_STATUS_REPORT csr;  
    }  
     
    [StructLayout(LayoutKindSequential Pack = )]  
    public struct CMPP_DELIVER  
    {  
    public long nMsgid;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sDestid;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sServiceid;  
    public byte uchTppid;  
    public byte uchTpudhi;  
    public byte uchMsgfmt;  
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sSrcterminalid;  
    public byte uchRegisteredDelivery;  
    public byte uchMsglength;  
     
    public CMPP_MO_MSGCONTENT mo_msg;  
     
    [MarshalAs(UnmanagedTypeByValTStr SizeConst = )]  
    public string sReserved;  


From:http://tw.wingwit.com/Article/program/net/201311/12324.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.