Red de conocimiento informático - Programación de la red - Cómo crear un teléfono móvil llamado Tongdaxin llamando a la función dll número 7

Cómo crear un teléfono móvil llamado Tongdaxin llamando a la función dll número 7

De esta manera, puede operar directamente la máquina POS en IE. En cuanto a la biblioteca dinámica que quiero encapsular, el fabricante solo proporciona una única biblioteca dinámica y una descripción de más de 100 palabras, lo que significa que hay varias funciones y sus parámetros correspondientes en la biblioteca dinámica. Es decir, el fabricante ni siquiera proporciona el archivo de cabecera correspondiente a la biblioteca dinámica. Después de recibir esta tarea, lo primero que pensé fue utilizar el ATL de VC para implementarla. Me preguntas por qué debería usar ATL en lugar de otros, como CB, Delphi y similares. Sólo puedo decir que creo que es mejor usar VC para escribir ActiveX. Además, hay que operar el hardware, así que, por supuesto, hay que usar VC. No digas que no te lo advertí, puede haber sorpresas inesperadas al usar CB, Delphi y similares. . . . ¡Ahora déjame ir al grano! Primero use ATLCOMAppWizard para generar un proyecto llamado PosActiveX. Al generar, el sistema le preguntará si desea generar una DLL o un EXE. Por supuesto que es una DLL. Después de generarlo, agregue una interfaz llamada IPosCtrl. Por supuesto, se usará en la Web, por lo que la interfaz generada debe ser pequeña, por lo que se eligió LiteControl. No me preguntes cómo unirte. Si no sabes cómo unirte, entonces este artículo que escribí no es adecuado para que lo leas. Así que espera hasta que aprendas cómo unirte a la interfaz. Una vez agregada la interfaz, implementaré el método. En primer lugar, se debe inicializar la interfaz. Por lo tanto, se agrega un método de interfaz llamado Init(shortnCom). Este método completa la carga de la DLL y las funciones funcionales en la DLL. También abre el puerto COM para operar la máquina POS. de la máquina POS llamada ModifyPosDT (BSTRbstrDT). También existe un método para borrar los datos en la máquina POS: EmptyPos(). Finalmente, cuando no quiera usarlo, debe cerrar el puerto COM abierto: Salir (). Al generar la interfaz IPosCtrl, también se generará la clase CPosCtrl. Tengo la costumbre de escribir todos los métodos de implementación en la clase y la interfaz solo genera los métodos que desea generar en la clase. Entonces escribí los siguientes métodos en la clase: InitDll()----cargar la biblioteca DLL y sus funciones; ExitDll()----descargar la biblioteca DLL, si no la descargas después de su uso, ocupará. memoria. Entonces es indispensable. SetPosDateTime(char*pchDT)---Establezca la hora de la máquina POS. ClearPos()----Borra los registros en la máquina POS. He escrito estos métodos en la clase. Permítanme hablar sobre los métodos de interfaz que quiero generar: Iint (shortnCom) ---- inicializa la interfaz y prepárate para la llamada. Salir () ---- Al salir del programa, llámelo para salir de la llamada de la interfaz. ModifyPosDT(BSTRbstrDT)----Establece la hora de la máquina POS. EmptyPos()----Borrar datos de la máquina POS. Eso es todo.

¡Ahora echemos un vistazo a mi programa fuente! //PosCtrl.cpp:ImplementacióndeCPosCtrl#include"stdafx.h"#include"PosActiveX.h"#include"PosCtrl.h"/////////////////////// / ///////////////////////////////////////////////// ///// ///////CPosCtrl////////////////////////////////////// //////// //////////////////////////////////////// Definiciones constantes utilizadas por Police.dll///// ///////////////////////////////////////// ///////////// ///////////////////////#defineCom_UpRecord1#defineCom_UpPoliceLen2#defineCom_UpSimpleDataLen3#defineCom_UpSimplePunishLen4#def ineCom_UpGeneralDataLen5#defineCom_UpGeneralPunishLen6#defineCom_EmptyPolice7 #defineCom_EmptySimpleData8#defineCom_EmptySimple Punish9#defineCom_EmptyGeneralData10#defineCom_EmptyGeneralPunish11#defineCom_DownRecord0x80#defineCom_DownStreetCodeLen0x81#defineCom_DownBlackListLen0x82 #Definecom_downpecanceLelen0x83#Definecom_downpeCCANCANERLEN0X 84#Definecom_downDateTime0x85# #definerr_upsimpledatalen0#DEFINEERR_UPSIMPUNISHLEN1#Defineerr_upGeneralen2#DEFINEERR_UPGENEREN3#Defineerr_uppoliclen4# EERR_UPRECORD5#DEFINEERR_DOWNSTREETCODELEN6#Defineerr_downSimplepeCCANCANCYELEN7#Definer_ definerr_downdatetime10#DEFINEERR_EMPTYDA11#DEFINEERR_GETCODE12;#DefineConst_terminator0x20 // ////////////////////////////////////////////////// /////////////////////agis //////////////////////////// ////////////////////////// /////////////////////#pragmadata_seg( "mydata")staticHINSTANCEDLLInst=NULL;//Identificador de biblioteca dinámica #pragmadata_seg()//HANDLEhCom;//Identificador de puerto serie COM/ ////////////////////// ////////////////////////////

//////////////////////////////////////POLICE.DLL definición de función de función de biblioteca dinámica//// // ///////////////////////////////////////////////// ///// /////////////////////////HANDLE(__stdcall*Init_comm)(LPSTRstr);//Inicializa el puerto de comunicación BYTE(__stdcall* Salir)(HANDLEhCom); //Cerrar el puerto de comunicación BYTE(__stdcall*Protocol)(HANDLEhCom,BYTEcmd,BYTElen,BYTE*_dt,BYTE*prlen,BYTE*prdt);//Protocolo de comunicación BYTE(__stdcall*Pipe_control)(HANDLEhCom) ,BYTEmode);//Control de múltiples canales typedefBYTE(__stdcall*Dev_escape)(HANDLEhCom);//Desconectar el control multicanal//////////////////////// //////// /////////////////////////////////////////// /////////CPosCtrl/ /-------------------------------- ----------- --------------------------////Función: cargar la biblioteca dinámica POLICE.DLL y algunas de sus funciones funcionales //Parámetros de entrada/salida: Ninguno //Versión: 1.0 //Modificación: //------------------------- -------------------- ------------------------------ ----------//voidCPosCtrl::InitDll(){DLLInst =LoadLibrary("police.dll");if(DLLInst!=NULL){Init_comm=(HANDLE(__stdcall*)(LPSTR)) GetProcAddress(DLLInst,"Init_comm");Salir=(BYTE(__stdcall*)(HANDLE) )(GetProcAddress(DLLInst,"Salir"));Protocolo=(BYTE(__stdcall*)(HANDLE,BYTE,BYTE,BYTE*_dt ,BYTE*prlen,BYTE*prdt))(GetProcAddress(DLLInst,"Protocolo")) ;Pipe_control=(BYTE(__stdcall*)(HANDLE,BYTE))(GetProcAddress(DLLInst,"Pipe_control"));Dev_escape=(BYTE (__stdcall*)(HANDLE))(GetProcAddress(DLLInst,"Dev_escape"));} else{::MessageBox(NULL,"¡Error al cargar la biblioteca dinámica! ","Mensaje de aviso",MB_OK|MB_ICONINFORMATION);exit(0);}}//----------------------- -------------------------------------------------- /// /Función: Liberar biblioteca dinámica //Parámetros de entrada/salida: Ninguno //Versión: 1.0 //Modificación: //---------------------- -------------------------------------------------- -- -//voidCPosCtrl::ExitDl

l(){if(DLLInst!=NULL)FreeLibrary(DLLInst);}//------------------------------- --- ---------------------------------------------// //Función: método de interfaz de control, que proporciona acceso externo para cerrar el puerto serie y liberar la biblioteca dinámica. //Parámetros de entrada/salida: Ninguno //Versión: 1.0 //Modificación: //------------------------------- --- ---------------------------------------------// STDMETHODIMPCPosCtrl:: Quit(){//TODO:Agregue su código de implementación aquí(*Exit)(hCom);ExitDll();::MessageBox(NULL,"Cerrar puerto COM exitosamente","Mensaje rápido",MB_OK|MB_ICONINFORMATION);returnS_OK;} STDMETHODIMPCPosCtrl:: get_ComNo(short*pVal){//TODO:Addyourimplementationcodehere*pVal=m_ComNo;returnS_OK;}STDMETHODIMPCPosCtrl::put_ComNo(shortnewVal){//TODO:Addyourimplementationcodeherem_ComNo=newVal;returnS_OK;}//------ --- ----------------------------------------------- --- ------------------////Función: Proporciona la interfaz externa para inicializar la biblioteca dinámica e implementa la función de abrir el puerto serie. //Parámetros de entrada/salida: 11--El número de serie que se abrirá.