;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
鍦ˋctiveX鎺т欢涓浣曞姩鎬佽皟鐢―LL鍑芥暟 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> VC >> 绯荤粺骞冲彴 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

鍦ˋctiveX鎺т欢涓浣曞姩鎬佽皟鐢―LL鍑芥暟

鍙戝竷: 2008-6-26 12:04 |  浣滆: admin |   鏌ョ湅: 10娆

涓嬭浇鏈枃鎵闄勬簮浠g爜

鍒氬埌鍏徃涓嶄箙,鎺ュ埌棰嗗鐨勪笅杈剧殑涓涓换鍔★紝灏辨槸鎶婂POS鏈烘搷浣滃姛鑳藉皝瑁呭湪ActiveX鎺т欢涓紝鍦↖E涓皟鐢ㄣ傝繖鏍峰氨鑳藉疄鐜板湪IE涓婄洿鎺ュPOS鏈鸿繘琛屾搷浣溿傝屾垜瑕佸皝瑁呯殑杩欎釜鍔ㄦ佸簱锛屽巶瀹跺彧鎻愪緵浜嗕竴涓崟鐨勫姩鎬佸簱鍜屼竴鐧惧瀛楃殑璇存槑锛屼篃灏辨槸璇存槑涓涓嬪姩鎬佸簱涓湁鏈轰釜鍑芥暟鍜屽叾瀵瑰簲鐨勫弬鏁般備篃灏辨槸鍘傚灏辫繛鍔ㄦ佸簱瀵瑰簲鐨勫ご鏂囦欢涔熸病鏈夋彁渚涖:-( 杩欐牱涔熻锛燂紒

鎺ュ埌杩欎釜浠诲姟鍚庯紝鎴戠涓鎯冲埌鐨勬槸鐢╒C鐨凙TL鏉ュ疄鐜板畠銆備綘闂垜涓轰粈涔堣鐢ˋTL涔熶笉鐢ㄥ埆鐨勶紝濡侰B銆丏elphi涔嬬被鐨勩傛垜鍙兘璇存垜瑙夊緱鍐橝ctiveX杩樻槸鐢╒C濂斤紱鍐典笖杩樿瀵圭‖浠惰繘琛屾搷浣滐紝杩欐牱涓鏉ュ綋鐒舵槸鐢╒C浜嗐傚埆璇存垜娌℃彁閱掍綘锛岀敤CB銆丏elphi涔嬬被鐨勬湁鍙兘浼氬嚭鐜伴鎯充笉鍒扮殑鎯婂......

鐜板湪璁╂垜甯︾潃杩涘叆姝i鍚э紒鍏堢敤ATL COM AppWizard鐢熸垚涓涓悕鍙玃osActiveX鐨勫伐绋嬶紝鐢熸垚鏃剁郴缁熶細闂綘鏄敓鎴怐LL杩樻槸EXE銆傚綋鐒舵槸DLL鐨勪簡銆傜敓鎴愬ソ鍚庡姞鍏ヤ竴涓帴鍙e彨IPosCtrl锛屽綋鐒朵簡瑕佸湪Web涓婄敤锛屾墍浠ョ敓鎴愮殑鎺ュ彛涓瀹氭槸瑕佸皬鎵浠ラ夋嫨Lite Control鐨勩備綘鍙埆闂垜鎬庝箞鍔犲叆锛屽鏋滆繖閮戒笉浼氾紝閭f垜鍐欑殑杩欐枃绔犳槸涓嶉傚悎浣犵湅鐨勩傛墍浠ョ瓑浣犲浼氬姞鍏ユ帴鍙e悗鍐嶇湅銆傛帴鍙e姞濂藉悗锛屾垜灏辫瀹炵幇鏂规硶浜嗐傞鍏堢敤鎺ュ彛涓鑸兘瑕佸鍏惰繘琛屽垵濮嬪寲銆傛墍浠ュ姞鍏ヤ竴涓彨Init(short nCom)鐨勬帴鍙f柟娉曪紝璇ユ柟娉曞畬鎴愬姞杞紻LL鍜孌LL涓殑鍔熻兘鍑芥暟,杩樻湁灏辨槸鎵撳紑瀵筆OS鏈鸿繘琛屾搷浣滅殑COM鍙o紱杩樻湁涓涓槸淇敼POS鏈虹殑鏃堕棿鐨勬柟娉曞彨ModifyPosDT(BSTR bstrDT)锛涜繕鏈変釜鏄竻绌篜OS鏈轰腑鏁版嵁鐨勬柟娉--EmptyPos()銆傛渶鍚庯紝褰撲綘涓嶆兂鐢ㄦ椂灏辫鍏抽棴鎵鎵撳紑鐨凜OM鍙--Quit()銆傚湪鐢熸垚鎺ュ彛IPosCtrl鏃跺悓鏃朵細鐢熸垚CPosCtrl绫汇傛垜鏈変釜涔犳儻锛屽氨鏄垜涓鑸槸鎶婂疄鐜版柟娉曢兘鍐欏湪绫讳腑锛岃屾帴鍙e彧鏃惰緭鍑鸿绫讳腑浣犳兂杈撳嚭鐨勬柟娉曘傛墍浠ュ湪绫讳腑鎴戝氨鍐欎簡浠ヤ笅鍑犱釜鏂规硶锛

InitDll()----鍔犺浇DLL搴撳拰鍏朵腑鐨勫姛鑳藉嚱鏁帮紱

ExitDll()----鍗歌浇DLL搴擄紝鐢ㄥ畬鍚庝笉鍗歌浇鏄湪鍗犵敤鍐呭瓨銆傛墍浠ュ畠鏄皯涓嶄簡鐨勩

SetPosDateTime(char * pchDT)---璁剧疆POS鏈虹殑鏃堕棿銆

ClearPos()----娓呯┖POS鏈轰腑鐨勮褰曘

鍦ㄧ被涓垜灏卞啓浜嗚繖鍑犱釜鏂规硶銆

鍦ㄨ涓涓嬫垜瑕佽緭鍑虹殑鎺ュ彛鏂规硶鏈夛細

Init(short nCom)----鍒濆寲鎺ュ彛锛屼负璋冪敤鍋氬噯澶囥

Quit()----閫鍑虹▼搴忔椂锛岃皟鐢ㄥ畠閫鍑烘帴鍙h皟鐢ㄣ

ModifyPosDT(BSTR bstrDT)----璁剧疆POS鏈烘椂闂淬

EmptyPos()----娓呯┖POS鏈烘暟鎹

瀹屼簡灏辫繖涔堝銆

鐜板湪鏉ョ湅鐪嬫垜鐨勬簮绋嬪簭鍚э紒

// PosCtrl.cpp : Implementation of CPosCtrl

#include "stdafx.h"

#include "PosActiveX.h"

#include "PosCtrl.h"

//--------------------------------------------------------

// Police.dll鎵鐢ㄥ埌鐨勫父閲忓畾涔

//--------------------------------------------------------

#define Com_UpRecord 1

#define Com_UpPoliceLen 2

#define Com_UpSimpleDataLen 3

#define Com_UpSimplePunishLen 4

#define Com_UpGeneralDataLen 5

#define Com_UpGeneralPunishLen 6

#define Com_EmptyPolice 7

#define Com_EmptySimpleData 8

#define Com_EmptySimplePunish 9

#define Com_EmptyGeneralData 10

#define Com_EmptyGeneralPunish 11

#define Com_DownRecord 0x80

#define Com_DownStreetCodeLen 0x81

#define Com_DownBlackListLen 0x82

#define Com_DownPeccancySimpleLen 0x83

#define Com_DownPeccancyGeneralLen 0x84

#define Com_DownDateTime 0x85

#define Com_Exit 0x86

#define Com_Init 0x87

#define Err_UpSimpleDataLen 0

#define Err_UpSimplePunishLen 1

#define Err_UpGeneralDataLen 2

#define Err_UpGeneralPunishLen 3

#define Err_UpPoliceLen 4

#define Err_UpRecord 5

#define Err_DownStreetCodeLen 6

#define Err_DownSimplePeccancyCodeLen 7

#define Err_DownGeneralPeccancyCodeLen 8

#define Err_DownBlackList 9

#define Err_DownDateTime 10

#define Err_EmptyData 11

#define Err_GetCode 12;

#define Const_Terminator 0x20

#pragma data_seg("mydata")

static HINSTANCE DLLInst = NULL; //鍔ㄦ佸簱鍙ユ焺

#pragma data_seg() //

HANDLE hCom; //COM涓插彛鍙ユ焺

//------------------------------------------------------

//POLICE.DLL鍔ㄦ佸簱鍑芥暟鍔熻兘瀹氫箟

//------------------------------------------------------

HANDLE (__stdcall *Init_comm)(LPSTR str);//鍒濆鍖栭氫俊鍙

BYTE (__stdcall *Exit)(HANDLE hCom);//鍏抽棴閫氫俊鍙

BYTE (__stdcall *Protocol)(HANDLE hCom,BYTE cmd,BYTE len,BYTE *_dt,BYTE *prlen,BYTE *prdt);//閫氫俊鍗忚

BYTE (__stdcall *Pipe_control)(HANDLE hCom,BYTE mode);//澶氳矾鎺у埗typedef

BYTE (__stdcall *Dev_escape)(HANDLE hCom);//鏂紑澶氳矾鎺у埗

//----------------------------------------------------------------------------//

// 鍔熻兘锛氬姞杞絇olice.dll鍔ㄦ佸簱鍜屽叾涓殑涓浜涘姛鑳藉嚱鏁

// 杈撳叆/杈撳嚭鍙傛暟锛氭棤

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// void CPosCtrl::InitDll()

{

DLLInst=LoadLibrary("police.dll");

if(DLLInst!=NULL)

{

Init_comm=(HANDLE(__stdcall *)(LPSTR))GetProcAddress(DLLInst,"Init_comm");

Exit=(BYTE(__stdcall *)(HANDLE))(GetProcAddress(DLLInst,"Exit"));

Protocol=(BYTE(__stdcall *)(HANDLE,BYTE,BYTE,BYTE *_dt,BYTE *prlen,BYTE *prdt))(GetProcAddress(DLLInst,"Protocol"));

Pipe_control=(BYTE(__stdcall *)(HANDLE,BYTE))(GetProcAddress(DLLInst,"Pipe_control"));

Dev_escape=(BYTE(__stdcall *)(HANDLE))(GetProcAddress(DLLInst,"Dev_escape"));

}

else

{

::MessageBox(NULL,"鍔犺浇鍔ㄦ佸簱澶辫触锛", "鎻愮ず淇℃伅", MB_OK | MB_ICONINFORMATION);

exit(0);

}

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氶噴鏀惧姩鎬佸簱

// 杈撳叆/杈撳嚭鍙傛暟锛氭棤

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// void CPosCtrl::ExitDll()

{

if(DLLInst!=NULL)

FreeLibrary(DLLInst);

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氭帶浠舵帴鍙f柟娉曪紝瀵瑰鎻愪緵鍏抽棴涓插彛锛岄噴鏀惧姩鎬佸簱銆

// 杈撳叆/杈撳嚭鍙傛暟锛氭棤 // 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// STDMETHODIMP CPosCtrl::Quit()

{

// TODO: Add your implementation code here

(*Exit)(hCom);

ExitDll();

::MessageBox(NULL,"鍏抽棴COM鍙f垚鍔","鎻愮ず淇℃伅",MB_OK | MB_ICONINFORMATION);

return S_OK;

}

STDMETHODIMP CPosCtrl::get_ComNo(short *pVal)

{

// TODO: Add your implementation code here

*pVal = m_ComNo;

return S_OK;

}

STDMETHODIMP CPosCtrl::put_ComNo(short newVal)

{

// TODO: Add your implementation code here

m_ComNo = newVal;

return S_OK;

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氭彁渚涘垵鍖栧姩鎬佸簱鐨勫澶栨帴鍙o紝骞跺疄鐜版墦寮鍙d覆鍙g殑鍔熻兘銆

// 杈撳叆/杈撳嚭鍙傛暟锛11--瑕佹墦寮鐨勪覆鍙e彿銆

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// STDMETHODIMP CPosCtrl::Init(short nComNo)

{

// TODO: Add your implementation code here

InitDll();

char str[20] = "";

sprintf(str,"COM%d",nComNo);

hCom = (*Init_comm)((LPSTR)str);

sprintf(str,"%d",hCom);

char temp[255] = "";

strcpy(temp,"鎵撳紑鐨勭鍙d负COM1锛屽彞鏌勪负锛");

strcat(temp,str);

::MessageBox(NULL,temp,"鎻愮ず淇℃伅",MB_OK | MB_ICONINFORMATION);

//TCHAR str[255];

//sprintf(str,"%d",hCom);

//MessageBox(str,"Caption",MB_OK);

return S_OK;

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氬疄鐜癆SCII鐮佸埌BCD鐮佺殑杞崲鍔熻兘鍑芥暟

// 杈撳叆/杈撳嚭鍙傛暟锛11-鎯宠浆鎹㈢殑ASCII鐮侊紝22-杩斿洖鐨凚CD鐮侊紝13-ASCII鐮佺殑闀垮害锛14-杩斿洖鐨凚CD鐮侀暱搴

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// void CPosCtrl::ASCII_TO_BCD(char *cSource, char *cResult, int iSourceLen, int iResultLen)

{

int iBegin,i;

iBegin=0;

if(iSourceLen%2)

{

iBegin=1;

cResult[0]=cSource[0]-''0'';

}

for (i=iBegin;i

{

cResult[i]=(cSource[2*i-iBegin]-''0'')*16+cSource[2*i-iBegin+1]-''0'';

}

//deprive off preData

cResult[iResultLen]=''\0'';

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氳缃甈OS鏈烘椂闂村嚱鏁般

// 杈撳叆/杈撳嚭鍙傛暟锛11-鎯宠璁剧疆鐨勬椂闂

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// BOOL CPosCtrl::SetPosDateTime(char * pchDateTime)

{

int n=1;

unsigned char cInput[257],cOutput[256];

BYTE byOutput,retVal;

for(int i=0;i<8;i++)

{

(*Pipe_control)(hCom,n); //澶氳矾鎺у埗

//淇敼POS鏈烘椂闂

{

if(::MessageBox(NULL,"鏄惁纭畾淇敼POS鏈烘椂闂达紵","鎻愮ず淇℃伅",MB_YESNO)==IDNO)

{

return FALSE;

}

ASCII_TO_BCD(pchDateTime,(char *)cInput,10,5);

retVal = (*Protocol)(hCom,Com_DownDateTime,5,cInput,&byOutput,cOutput);

if (retVal)

{

::MessageBox(NULL,"淇敼鎴愬姛锛","鎻愮ず淇℃伅",MB_OK | MB_ICONINFORMATION);

}

else

{

::MessageBox(NULL,"淇敼涓嶆垚鍔燂紒","鎻愮ず淇℃伅",MB_OK | MB_ICONINFORMATION);

}

}

n=n<<1 ;

}

(*Protocol)(hCom,0x86,5,cInput,&byOutput,cOutput); //涓嬭浇鎴愬姛

(*Dev_escape)(hCom); //鍏抽棴澶氳矾鎺у埗

(*Pipe_control)(hCom,0); //澶氳矾鎺у埗澶嶄綅

return TRUE;

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氬澶栨彁渚涚殑淇敼鏃堕棿鐨勬帴鍙f柟娉

// 杈撳叆/杈撳嚭鍙傛暟锛11-鎯宠璁剧疆鐨勬椂闂

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// STDMETHODIMP CPosCtrl::ModifyPosDT(BSTR bstrDT)

{

// TODO: Add your implementation code here

if(SetPosDateTime((char *)bstrDT))

{

return S_OK;

}

{

return S_FALSE;

}

}

//----------------------------------------------------------------------------//

// 鍔熻兘锛氬疄鐜版竻绌篜OS鏈哄唴鏁版嵁鐨勫嚱鏁般

// 杈撳叆/杈撳嚭鍙傛暟锛氭棤

// 鐗堟湰锛1.0

// 淇敼锛

//----------------------------------------------------------------------------// void CPosCtrl::ClearPos()

{

int n=1;

unsigned char cInput[257],cOutput[256];

BYTE byOutput,retVal;

for(int i=0;i<8;i++)

{

(*Pipe_control)(hCom,n); //澶氳矾鎺у埗

//娓呯┖POS鏈哄唴鐨勬暟鎹

if(::MessageBox(NULL,"鏄惁瑕佹竻绌篜OS鏈哄唴鏁版嵁锛","鎻愮ず淇℃伅",MB_YESNO | MB_ICONQUESTION)==IDNO)

{

return;

}

retVal = Protocol(hCom,7,1,cInput,&byOutput,cOutput); //閫氫俊鍗忚

if (!retVal)

{

retVal = Protocol(hCom,8,1,cInput,&byOutput,cOutput);

if (!retVal)

{

retVal = Protocol(hCom,9,1,cInput,&byOutput,cOutput);

if (!retVal)

{

retVal = Protocol(hCom,10,1,cInput,&byOutput,cOutput);

if (!retVal)

{

retVal = Protocol(hCom,11,1,cInput,&byOutput,cOutput);

}

}

}

::MessageBox(NULL,"POS鏈哄唴鏁版嵁宸茶娓呯┖锛","鎻愮ず淇℃伅",MB_OK | MB_ICONINFORMATION)

鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆