鍦ˋ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)




发表于 2009-1-5 19:48
| 











