// ClientApi.h: interface for the USSD API routines.
//
#ifndef  __CLIENT_API
#define  __CLIENT_API#define  MAX_MSISDN_LENGTH             20
#define  MAX_SERVICECODE_LENGTH        3
#define  MAX_USSDSTRING_LENGTH         181#define  UT_REQUEST        1     // Request.
#define  UT_NOTIFY         2     // Notify.
#define  UT_RESPONSE       3     // Response.
#define  UT_RELEASE        4     // Release.#define  UV_UNKNOWN        0x00  // 未知.
#define  UV_PHASE_I        0x10  // Phase I (只能由移动台发起)
#define  UV_PHASE_II       0x20  // Phase II
#define  UV_PHASE_II_PLUS  0x25  // Phase II+#define  INVALID_INSTANCE_HANDLE   ((HANDLE)-1)struct TUssdSwitchInfo   //业务转移信息
{
BYTE           m_bSwitchMode;
char           m_szMsIsdn[MAX_MSISDN_LENGTH + 1];
char           m_szServiceCode[MAX_SERVICECODE_LENGTH + 1];
char           m_szUssdString[MAX_USSDSTRING_LENGTH + 1];
};struct TUssdChargeIndInfo  //计费指示信息
{
    DWORD          m_dwChargeRatio;
    DWORD          m_dwChargeType;
    char           m_szChargeSource[MAX_MSISDN_LENGTH + 1];
    BYTE           m_bChargeLocation;
};struct TUssdData
{
DWORD  m_dwUssdCmd;     // USSD会话操作类型(Request、Response、Abort、Error)
BYTE   m_bUssdVersion; // USSD会话版本号(Phase I、Phase II、Phase II+)
    BYTE   m_bCodeScheme;   //编码方案
DWORD  m_dwErrorCode; // USSD错误代码(仅对UssdAbort和UssdError)
char   m_szMsIsdn[MAX_MSISDN_LENGTH + 1];         // 移动台号码.
char   m_szServiceCode[MAX_SERVICECODE_LENGTH + 1]; // 业务码.
char   m_szUssdString[MAX_USSDSTRING_LENGTH + 1]; // USSD串内容。
DWORD  m_dwUssdAppParam;                         // USSD业务应用程序自定义的参数。
};//-----------------------------------------------------------------------------
//                     CallBack Functions For GetMessage
//------------------------------------------------------------------------------
typedef int (*LPONUSSDREQUEST)(HANDLE hLoginInstance, HANDLE hUssdDialog,
   TUssdData UssdData, DWORD *pdwUssdAppParam);
typedef int (*LPONUSSDRESPONSE)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
char szUssdString[], DWORD dwUssdAppParam);
typedef int (*LPONUSSDABORT)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
 DWORD dwErrorCode, DWORD dwUssdAppParam);
typedef int (*LPONUSSDTIMEOUT)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
   DWORD dwUssdAppParam);
typedef int (*LPONUSSDCHGACK)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
  DWORD dwErrorCode, DWORD dwUssdAppParam);
struct TUssdCallbacks
{
    LPONUSSDREQUEST   m_pOnUssdRequest;
    LPONUSSDRESPONSE  m_pOnUssdResponse;
    LPONUSSDABORT     m_pOnUssdAbort;    
    LPONUSSDTIMEOUT   m_pOnUssdTimeOut;
    LPONUSSDCHGACK    m_pOnUssdChgAck;
};extern "C" 
{
int    PASCAL EXPORT UssdInit(char szServerAddress[],int nServicePort);
int    PASCAL EXPORT UssdExit();
HANDLE PASCAL EXPORT UssdLogin(char szAccountName[],char szPassword[],int *pnErrorCode,BOOL fAutoConnect,DWORD dwTimeOut);
BOOL   PASCAL EXPORT UssdLogout(HANDLE hLoginInstance,int *pnErrorCode);
BOOL   PASCAL EXPORT UssdIsConnectionOK(HANDLE hLoginInstance);
void   PASCAL EXPORT UssdGetErrorString(int nErrorCode,char *pszErrorString);
BOOL   PASCAL EXPORT UssdReloadErrorInfoLib();
HANDLE PASCAL EXPORT UssdLocalOpen(HANDLE hLoginInstance, DWORD dwUssdAppParam, DWORD *pdwErrorCode);
BOOL   PASCAL EXPORT UssdLocalClose(HANDLE hUssdDialog);
int    PASCAL EXPORT UssdSendRequest(HANDLE hUssdDialog, TUssdData UssdData);
int    PASCAL EXPORT UssdSendNotify(HANDLE hUssdDialog, TUssdData UssdData);
int    PASCAL EXPORT UssdSendResponse(HANDLE hUssdDialog, TUssdData UssdData);
int    PASCAL EXPORT UssdSendRelease(HANDLE hUssdDialog);
int    PASCAL EXPORT UssdSendAbort(HANDLE hUssdDialog,  DWORD dwErrorCode);
int    PASCAL EXPORT UssdSendSwitch(HANDLE hUssdDialog, TUssdSwitchInfo SwitchInfo);
int    PASCAL EXPORT UssdSendChargeInd(HANDLE hUssdDialog, TUssdChargeIndInfo ChargeIndInfo);
int    PASCAL EXPORT RegisterUssdCallbackFunctions(TUssdCallbacks CallbackFuncs);
};#endif   // __CLIENT_API defined.

解决方案 »

  1.   

    这转换很简单啊。。
    ------------------------------------------------------------
    1......
    #define  MAX_MSISDN_LENGTH             20
    变成
    const
      MAX_MSISDN_LENGTH=20;2........
    struct TUssdSwitchInfo   //业务转移信息
    {
    BYTE           m_bSwitchMode;
    char           m_szMsIsdn[MAX_MSISDN_LENGTH + 1];
    char           m_szServiceCode[MAX_SERVICECODE_LENGTH + 1];
    char           m_szUssdString[MAX_USSDSTRING_LENGTH + 1];
    };
    变成
    TUssdSwitchInfo=packed record 
      m_bSwitchMode  :BYTE;
      m_szMsIsdn     :array[0..MAX_MSISDN_LENGTH]     of char;
      m_szServiceCode:array[0..MAX_SERVICECODE_LENGTH]of char;
      m_szUssdString :array[0..MAX_USSDSTRING_LENGTH] of char;
    end;
      

  2.   

    3.................typedef int (*LPONUSSDREQUEST)(HANDLE hLoginInstance, HANDLE hUssdDialog,
       TUssdData UssdData, DWORD *pdwUssdAppParam);TYPE
    LPONUSSDREQUEST=function(hLoginInstance:THandle;hUssdDialog:THandle;
      UssdData:TUssdData;var dwUssdAppParam:DWORD);
      

  3.   

    楼主,我不知道哈,不过帮你顶!
    建议一下,最少应该把Delphi中不支持的类型全换成支持的类型
      

  4.   

    halfdream(哈欠) 大虾 再帮帮忙,下面也帮我转一下。主要是怕没转换好到时候程序出问题。
    //-----------------------------------------------------------------------------
    //                     CallBack Functions For GetMessage
    //------------------------------------------------------------------------------
    typedef int (*LPONUSSDREQUEST)(HANDLE hLoginInstance, HANDLE hUssdDialog,
       TUssdData UssdData, DWORD *pdwUssdAppParam);
    typedef int (*LPONUSSDRESPONSE)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
    char szUssdString[], DWORD dwUssdAppParam);
    typedef int (*LPONUSSDABORT)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
     DWORD dwErrorCode, DWORD dwUssdAppParam);
    typedef int (*LPONUSSDTIMEOUT)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
       DWORD dwUssdAppParam);
    typedef int (*LPONUSSDCHGACK)(HANDLE hLoginInstance, HANDLE hUssdDialog, 
      DWORD dwErrorCode, DWORD dwUssdAppParam);
    struct TUssdCallbacks
    {
        LPONUSSDREQUEST   m_pOnUssdRequest;
        LPONUSSDRESPONSE  m_pOnUssdResponse;
        LPONUSSDABORT     m_pOnUssdAbort;    
        LPONUSSDTIMEOUT   m_pOnUssdTimeOut;
        LPONUSSDCHGACK    m_pOnUssdChgAck;
    };