16,472
社区成员
发帖
与我相关
我的任务
分享
//XXXXXX 函数原型 XXXXXX
//结构体
struct TUssdCallbacks
{
LPONUSSDREQUEST m_pOnUssdRequest;
LPONUSSDRESPONSE m_pOnUssdResponse;
};
//定义函数指针
typedef int (*LPONUSSDREQUEST)(void * hLoginInstance, void * hUssdDialog,
struct TUssdData UssdData, unsigned long *pdwUssdAppParam);
typedef int (*LPONUSSDRESPONSE)(void * hLoginInstance, void * hUssdDialog,
char szUssdString[], unsigned long dwUssdAppParam);
//函数指针指向的函数
int PASCAL EXPORT UssdSendRequest(void * hUssdDialog, struct TUssdData UssdData);
int PASCAL EXPORT UssdSendResponse(void * hUssdDialog, struct TUssdData UssdData);
//DLL文件导出的函数
#ifdef __cplusplus
extern "C"
{
#endif
int PASCAL EXPORT UssdSendRequest(void * hUssdDialog, struct TUssdData UssdData);
int PASCAL EXPORT UssdSendResponse(void * hUssdDialog, struct TUssdData UssdData);
int PASCAL EXPORT RegisterUssdCallbackFunctions(struct TUssdCallbacks CallbackFuncs);
#ifdef __cplusplus
};
#endif
//###### 以上是跟DLL库相关的头文件中的代码 ######
// @@@@@@ 通过DLL中的回调函数接收设备返回的信息 @@@@@@
//以下代码是注册和调用回调函数,DLL文件是跟设备通信的接口;
//在回调函数中接收设备返回的信息。。。
用下面的方式来实现,是否可以呢?
//定义结构体
TUssdCallbacks myCallbackFuncs;
myCallbackFuncs.m_pOnUssdResponse = UssdSendRequest;
myCallbackFuncs.m_pOnUssdResponse = UssdSendResponse;
//注册结构体中的函数
RegisterUssdCallbackFunctions(myCallbackFuncs);
//回调方式接收消息
static int CALLBACK UssdSendRequest
(void * hLoginInstance, void * hUssdDialog, char szUssdString[], unsigned long dwUssdAppParam)
{
//接收设备返回的消息
//处理自己的业务逻辑
};
//回调方式接收消息
static int CALLBACK UssdSendResponse
(void * hLoginInstance, void * hUssdDialog, char szUssdString[], unsigned long dwUssdAppParam)
{
//接收设备返回的消息
//处理自己的业务逻辑
}
struct TUssdCallbacks
{
LPONUSSDRESPONSE m_pOnUssdResponse;
};
//补充“CALLBACK” Add 0228
typedef int (CALLBACK *LPONUSSDRESPONSE)(void * hLoginInstance, void * hUssdDialog,
char szUssdString[], unsigned long dwUssdAppParam);
//======================
以上代码是函数原型,
以下代码是注册和调用回调函数。。。
//定义结构体
/*struct*/ TUssdCallbacks myCallbackFuncs;
//给结构体变量赋值
myCallbackFuncs.m_pOnUssdResponse = OnSendResponse;
//注册回调函数
int retRegisCallFun = RegisterUssdCallbackFunctions(myCallbackFuncs);
//回调方式接收设备返回的消息
static int CALLBACK OnSendResponse(HANDLE hLoginInstance, HANDLE hUssdDialog,
char szUssdString[], DWORD dwUssdAppParam)
{
AfxMessageBox("回调函数中接收消息");
return 0;
}
//给结构体赋值
/*struct*/ TUssdCallbacks myCallbackFuncs;
myCallbackFuncs.m_pOnUssdResponse = UssdSendRequest;
myCallbackFuncs.m_pOnUssdResponse = UssdSendResponse;
//DLL头文件中代码如下
// 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 (*LPONUSSDERROR)(HANDLE hLoginInstance, HANDLE hUssdDialog,
DWORD dwErrorCode, DWORD dwUssdAppParam);
typedef int (*LPONUSSDTIMEOUT)(HANDLE hLoginInstance, HANDLE hUssdDialog,
DWORD dwUssdAppParam);
struct TUssdCallbacks
{
LPONUSSDREQUEST m_pOnUssdRequest;
LPONUSSDRESPONSE m_pOnUssdResponse;
LPONUSSDABORT m_pOnUssdAbort;
LPONUSSDERROR m_pOnUssdError;
LPONUSSDTIMEOUT m_pOnUssdTimeOut;
};
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 UssdSendError(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.
//定义结构体
/*struct*/ TUssdCallbacks myCallbackFuncs;
myCallbackFuncs.m_pOnUssdResponse = UssdSendRequest;
myCallbackFuncs.m_pOnUssdResponse = UssdSendResponse;
//SetMyCallBack(LPONUSSDRESPONSE pfunc);
//myCallbackFuncs->m_pOnUssdResponse = UssdSendRequest;
//myCallbackFuncs->m_pOnUssdResponse = UssdSendResponse;