pos機(jī)遠(yuǎn)程刷卡步驟,VC實(shí)現(xiàn)遠(yuǎn)程對(duì)象函數(shù)調(diào)用

 新聞資訊2  |   2023-06-06 09:16  |  投稿人:pos機(jī)之家

網(wǎng)上有很多關(guān)于pos機(jī)遠(yuǎn)程刷卡步驟,VC實(shí)現(xiàn)遠(yuǎn)程對(duì)象函數(shù)調(diào)用的知識(shí),也有很多人為大家解答關(guān)于pos機(jī)遠(yuǎn)程刷卡步驟的問(wèn)題,今天pos機(jī)之家(m.afbey.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來(lái)看下吧!

本文目錄一覽:

1、pos機(jī)遠(yuǎn)程刷卡步驟

pos機(jī)遠(yuǎn)程刷卡步驟

VC實(shí)現(xiàn)遠(yuǎn)程對(duì)象方法調(diào)用及事件訂閱觸發(fā),方便開(kāi)發(fā)C/S系統(tǒng)

參考flash遠(yuǎn)程共享對(duì)象,方便客戶端調(diào)用遠(yuǎn)程功能,可同時(shí)包含多個(gè)應(yīng)用,一個(gè)應(yīng)用下包含多個(gè)遠(yuǎn)程對(duì)象,遠(yuǎn)程應(yīng)用對(duì)象的目錄結(jié)構(gòu)如下圖

網(wǎng)絡(luò)通訊部分采用完成端口模式,通訊數(shù)據(jù)采用封裝數(shù)據(jù)對(duì)象XVarArray,該對(duì)象支持基本數(shù)據(jù)類型int int64 bytes long float char *,該對(duì)象常用函數(shù)如下:

static bool AttachBytes(BYTE *pByte,int nLength,OutManyVarArray &m_OutManyVarArray);

void Copy(XVarArray &m_XVarArray);

bool RemoveElementAt(int nIndex);

int GetElementCount();

bool ReadElement(void *pElement,BYTE &nType,int &L);

bool SetOrderElementPos(int nNum);//設(shè)置到第幾個(gè)元素

bool ReadObj(void *pObj,int &L);

bool ReadBytes(BYTE *pByte,int &L);

bool ReadStr(char *pStr,int &L);

bool ReadInt64(__int64 &iZhi64);

bool ReadFloat(float &fZhi);

bool ReadInt(int &iZhi);

void SetRealPos(int nPostion);

void SetRealPosEnd();

void SetRealPosBegin();

void WriteObj(void *pObj,int L);

void WriteBytes(unsigned char *pByte,int L);

void WriteStr(char *pStr);

void WriteInt64(__int64 iZhi64);

void WriteFloat(float fZhi);

void WriteInt(int nZhi);

XVarArray & operator =(XVarArray &Var);

封裝的遠(yuǎn)程對(duì)象基類,方便編寫遠(yuǎn)程對(duì)象

#include "..\\include\\XNetEvent.h"

typedef map<string,XNetEvent *>XNetEventType;//對(duì)象的所有事件

class AFX_EXT_CLASS XOneObject

{

public:

void GetEvents(CStringArray &m_EventArray);

void DebugObj(char *pStr);

void *pXOneApp;

bool bDIYEvent;//自定義觸發(fā)事件

void InitPack();

virtual void RemoveSOCKET(SOCKET s);//一個(gè)SOCKET 掉線

void RemoveSEvent(SOCKET s);

HANDLE hNet;

DWORD pBasePack;//公有對(duì)象使用同一個(gè),私有對(duì)象擁有獨(dú)立連接的

void AddOneEvent(char *sEventName);

void PostEvent(char *sEventName,XVarArray &m_XVarArray);

bool bPublic;

CString sAppName;

CString sObjName;

CStringArray m_EventNameArray;

virtual void InitObjEvent();

bool CallClientFunc(char *sFName,XVarArray &InVarArray,XVarArray &OutVarArray);

bool GetAllFuncNameArray(CStringArray &NameArray);

typedef bool (XOneObject::*pCLASSFUNC)(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

typedef map<string,pCLASSFUNC>XCLASSFUNC;

XOneObject();

virtual ~XOneObject();

virtual void InitObject();

virtual XOneObject * GetAnOtherObject();

int nTestZhi;

bool ExampFunc(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

void PushFuncName(char *sFName,pCLASSFUNC pFunc);

bool CallFunc(char *sFName,SOCKET s,XVarArray &InVarArray,XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

bool AttachOneEvent(char *sEventName,SOCKET s,char *sUserID);

protected:

XCLASSFUNC m_XCLASSFUNC;

XNetEventType m_XNetEventType;

};

派生該基類實(shí)現(xiàn)遠(yuǎn)程對(duì)象如

class XShareObjectNO2:public XOneObject

{

public:

//典型的對(duì)象函數(shù) 參數(shù)s:網(wǎng)絡(luò)連接SOCKET ,InVarArray:輸入?yún)?shù):OutVarArray:輸出參數(shù),bClose:返會(huì)true表示斷開(kāi)連接,nThreadNO:表示在服務(wù)端低幾個(gè)線程調(diào)用

bool JsonFunction(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

void InitObjEvent();//初始化對(duì)象事件

bool AddStr(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

XOneObject * GetAnOtherObject();

bool MyFunc(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO);

void InitObject();//初始化對(duì)象基本參數(shù)

XShareObjectNO2();

virtual ~XShareObjectNO2();

};

實(shí)現(xiàn)類:

XShareObjectNO2::XShareObjectNO2()

{

}

XShareObjectNO2::~XShareObjectNO2()

{

}

void XShareObjectNO2::InitObject()

{MyFunc

PushFuncName("MyFunc",static_cast<XOneObject::pCLASSFUNC>(&XShareObjectNO2::MyFunc));//初始對(duì)象函數(shù)MyFunc指向函數(shù)MyFunc

PushFuncName("AddStr",static_cast<XOneObject::pCLASSFUNC>(&XShareObjectNO2::AddStr));//初始對(duì)象函數(shù)AddStr指向函數(shù)AddStr

PushFuncName("JsonFunction",static_cast<XOneObject::pCLASSFUNC>(&XShareObjectNO2::JsonFunction));//初始對(duì)象函數(shù)AddStr指向函數(shù)JsonFunction

}

bool XShareObjectNO2::MyFunc(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO)

{

bClose=false;

InVarArray.SetRealPosBegin();

int a,b;

InVarArray.ReadInt(a);

InVarArray.ReadInt(b);

int c=a*b;

OutVarArray.WriteInt(c);

OutVarArray.SetRealPosBegin();

return true;

}

XOneObject * XShareObjectNO2::GetAnOtherObject()

{

XShareObjectNO2 *pShareObjectNO2=new XShareObjectNO2();

pShareObjectNO2->InitObject();

pShareObjectNO2->InitObjEvent();

pShareObjectNO2->hNet=hNet;

return pShareObjectNO2;

}

bool XShareObjectNO2::AddStr(SOCKET s,XVarArray &InVarArray, XVarArray &OutVarArray,bool &bClose,DWORD &dwObject,int nThreadNO)

{

bClose=false;

InVarArray.SetRealPosBegin();

char Str1[200],Str2[200];

int L;

InVarArray.ReadStr(NULL,L);

char *pStr1=new char [L+1];

InVarArray.ReadStr(pStr1,L);

pStr1[L]=0;

InVarArray.ReadStr(NULL,L);

char *pStr2=new char [L+1];

InVarArray.ReadStr(pStr2,L);

pStr2[L]=0;

CString TStr;

TStr.Format("%s%s",pStr1,pStr2);

delete[]pStr1;

delete[]pStr2;

OutVarArray.WriteStr((char *)(const char *)TStr);

OutVarArray.SetRealPosBegin();

XVarArray m_XVarArray0;

m_XVarArray0.WriteStr("DataChange 事件觸發(fā)的消息");

PostEvent("DataChange",m_XVarArray0);//觸發(fā)DataChange事件

return true;

}

void XShareObjectNO2::InitObjEvent()

{

AddOneEvent("DataChange");//初始化對(duì)象事件DataChange

AddOneEvent("JsonEvent");//初始化對(duì)象事件JsonEvent

}

bool XShareObjectNO2::JsonFunction(SOCKET s, XVarArray &InVarArray, XVarArray &OutVarArray, bool &bClose, DWORD &dwObject, int nThreadNO)

{

bClose=false;

InVarArray.SetRealPosBegin();

int L;

InVarArray.ReadStr(NULL,L);

char *pStr=new char[L+1];

memset(pStr,0,L+1);

InVarArray.ReadStr(pStr,L);

OutVarArray.WriteStr(pStr);

PostEvent("JsonEvent",OutVarArray);

delete[]pStr;

return true;

}

對(duì)象dll裝載公有輸出函數(shù)如:

extern DWORD WINAPI GetOneObject(char *sObjectName)//獲得指定名稱的遠(yuǎn)程對(duì)象

{

if(strcmp(sObjectName,"XShareObjectNO1")==0)

{

XShareObjectNO1 *pShareObjectNO1=new XShareObjectNO1();

pShareObjectNO1->InitObject();

pShareObjectNO1->InitObjEvent();

return (DWORD)pShareObjectNO1;

}

else

{

if(strcmp(sObjectName,"XShareObjectNO2")==0)

{

XShareObjectNO2 *pShareObjectNO2=new XShareObjectNO2();

pShareObjectNO2->InitObject();

pShareObjectNO2->InitObjEvent();

return (DWORD)pShareObjectNO2;

}

}

}

extern bool WINAPI GetModeObjectsName(CStringArray &ObjectNameArray)//獲得當(dāng)前dll中包含哪些遠(yuǎn)程對(duì)象名

{

ObjectNameArray.RemoveAll();

ObjectNameArray.Add("XShareObjectNO1");

ObjectNameArray.Add("XShareObjectNO2");

return true;

}

extern bool WINAPI GetOneObjectAllFuncName(DWORD pXOneObject,CStringArray &ObjectFunNameArray) //返回對(duì)象包含的函數(shù)名

{

XOneObject *pXOneObject0=(XOneObject *)pXOneObject;

pXOneObject0->GetAllFuncNameArray(ObjectFunNameArray);

return true;

}

為方便客戶端調(diào)用,封裝客戶端調(diào)用框架,目前支持的VC C# Java的客戶端調(diào)用

以VC客戶端為例

class AFX_EXT_CLASS XClientNetCtrl

{

public:

void CloseOneNet(char *sAppName);//關(guān)閉一個(gè)遠(yuǎn)程應(yīng)用

bool CallShareObjectFunc(XClientShareObject *pXClientShareObject,char *sFName,XVarArray &m_VarArray,XVarArray *pOutXVarArray=NULL);//調(diào)用遠(yuǎn)程對(duì)象方法

XClientShareObject * GetOneNetShareObject(char *sAppName,char *sShareObjectName,bool bPerson=false);//獲得一個(gè)遠(yuǎn)程對(duì)象 sAppName:應(yīng)用名 sShareObjectName:對(duì)象名

bool GetOneAppNet(char *sIP,UINT nPort,char *sAppName,pRUNCLASSFUNC pExitNet=NULL,DWORD pXRunShareObjectBase=0);//獲得一個(gè)應(yīng)用

XClientOneNetArray m_XClientOneNetArray;

XClientOneNetFromNameArray m_XClientOneNetFromNameArray;

XClientNetCtrl();

virtual ~XClientNetCtrl();

};

class AFX_EXT_CLASS XClientShareObject //客戶端對(duì)象的基類

{

public:

bool EventOutFunc(char *sEventName,XVarArray &OutVarArray);

void AppAdd(HANDLE hNet,char *sPAppName,DWORD pXClientOneNet);

bool OutFuncResult(char *sFName,XVarArray &m_XVarArray);

void AttachXNetFuncReult(char *sFName,DWORD pXRunShareObjectBase,pRUNCLASSFUNC pFunc);

bool ActOneFunc(char *sFName,XVarArray &m_InXVarArray,XVarArray *pOutXVarArray=NULL);//執(zhí)行運(yùn)行函數(shù),如果要等待結(jié)果那么就要賦pOutXVarArray,如果不用等待只是用結(jié)果事件那么不用賦值;

char sName[150];

bool RunOutFunc(char *sEventName);

typedef map<string ,struct RunBaseST *>XRUNCLASSFUNCBASE;

XRUNCLASSFUNCBASE m_XEVENTCLASSFUNCBASE;

XRUNCLASSFUNCBASE m_XFUNCOUTFUNCBASE;

void AttachXNetEvent(char *sEventName,DWORD pXRunShareObjectBase,pRUNCLASSFUNC pFunc);

void AddListenEvent(char *sEventName);

void SetNetEventFunc(NetEvent *pNetEvent0);

NetEvent *pNetEvent;

CStringArray m_ListenNameArray;

void *pParentApp;

bool bPerson;

XClientShareObject();

virtual ~XClientShareObject();

};

客戶端調(diào)用的例子

class CNetRunDlg : public CDialog, XRunShareObjectBase

{

// Construction

public:

void OBEventResult(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis);

void OBFuncResult(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis);

void OnNetExitEvent(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis);

CNetRunDlg(CWnd* pParent = NULL); // standard constructor

XClientShareObject *pXShareObject1,*pXShareObject2;

XClientNetCtrl m_XClientNetCtrl;

// Dialog Data

//{{AFX_DATA(CNetRunDlg)

enum { IDD = IDD_NETRUN_DIALOG };

// NOTE: the ClassWizard will add data members here

//}}AFX_DATA

// ClassWizard generated virtual function overrides

//{{AFX_VIRTUAL(CNetRunDlg)

protected:

virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support

//}}AFX_VIRTUAL

// Implementation

protected:

HICON m_hIcon;

// Generated message map functions

//{{AFX_MSG(CNetRunDlg)

virtual BOOL OnInitDialog();

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

afx_msg void OnPaint();

afx_msg HCURSOR OnQueryDragIcon();

afx_msg void OnButton1();

afx_msg void OnButton2();

afx_msg void OnButton4();

afx_msg void OnButton3();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

初始

m_XClientNetCtrl.GetOneAppNet("192.168.0.1",5242,"game",static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OnNetExitEvent),(DWORD)this);//連接服務(wù)器

pXShareObject1=m_XClientNetCtrl.GetOneNetShareObject("game","XShareObjectNO1",true);//獲得遠(yuǎn)程對(duì)象XShareObjectNO1

pXShareObject1->AttachXNetFuncReult("NO2Func",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBFuncResult));//綁定遠(yuǎn)程序?qū)ο骕ShareObjectNO1函數(shù)NO2Func返回函數(shù)

pXShareObject1->AttachXNetEvent("DataChange",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBEventResult));//綁定遠(yuǎn)程序?qū)ο骕ShareObjectNO1事件函數(shù)DataChange

pXShareObject2=m_XClientNetCtrl.GetOneNetShareObject("game","XShareObjectNO2",true);//獲得遠(yuǎn)程對(duì)象XShareObjectNO2

pXShareObject2->AttachXNetFuncReult("AddStr",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBFuncResult));//綁定遠(yuǎn)程序?qū)ο骕ShareObjectNO2函數(shù)NO2Func返回函數(shù)

pXShareObject2->AttachXNetEvent("DataChange",(DWORD)this,static_cast<pRUNCLASSFUNC>(&CNetRunDlg::OBEventResult));//綁定遠(yuǎn)程序?qū)ο骕ShareObjectNO2事件函數(shù)DataChange

void CNetRunDlg::OnNetExitEvent(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis)

{

CNetRunDlg *pNetRunDlg=(CNetRunDlg *)pThis;

}

void CNetRunDlg::OBFuncResult(XClientShareObject *pXClientShareObject, char *sFuncName, XVarArray &OutXVarArray, DWORD pThis)//*sFuncName:執(zhí)行的函數(shù),OutXVarArray返回的結(jié)果

{

CNetRunDlg *pNetRunDlg=(CNetRunDlg *)pThis;

}

void CNetRunDlg::OBEventResult(XClientShareObject *pXClientShareObject, char *sEventName, XVarArray &OutXVarArray, DWORD pThis)//*sEventName:返回的事件,OutXVarArray返回的結(jié)果

{

CNetRunDlg *pNetRunDlg=(CNetRunDlg *)pThis;

char TStr[100];

int L;

OutXVarArray.ReadStr(TStr,L);

TStr[L]=0;

AfxMessageBox(TStr);

}

XShareObjectNO2調(diào)用函數(shù)

XVarArray m_XVarArray,m_XOutVarArray;

m_XVarArray.WriteStr("中國(guó)");

m_XVarArray.WriteStr("北京");

pXShareObject2->ActOneFunc("AddStr",m_XVarArray,&m_XOutVarArray);

char TStr[200];

int L;

m_XOutVarArray.ReadStr(TStr,L);

TStr[L]=0;

AfxMessageBox(TStr);

TRACE("ok");

基于該遠(yuǎn)程對(duì)象實(shí)現(xiàn)一個(gè)類QQ的聊天工具PCEQ,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)聊天,群聊,文件傳輸,遠(yuǎn)程協(xié)助,語(yǔ)音聊天,視頻聊天等常用功能

如今消息生產(chǎn)消費(fèi)訂閱已經(jīng)有不少成熟的開(kāi)發(fā)包可調(diào)用,而那些年你也是否自己造了一大堆輪子呢?

以上就是關(guān)于pos機(jī)遠(yuǎn)程刷卡步驟,VC實(shí)現(xiàn)遠(yuǎn)程對(duì)象函數(shù)調(diào)用的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于pos機(jī)遠(yuǎn)程刷卡步驟的知識(shí),希望能夠幫助到大家!

轉(zhuǎn)發(fā)請(qǐng)帶上網(wǎng)址:http://m.afbey.com/newsone/63936.html

你可能會(huì)喜歡:

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 babsan@163.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。