pos在c语言中(c调用pos机dll)

C#访问局域网POS小票打印机

pos在c语言中(c调用pos机dll)

其实微软的windows操作最大的好处就是硬件无关性,你可以不关心硬件是如何变换。直接将打印机接电脑上装上驱动就OK了,其他的你只管将在编程时打印机对象作为一个画图纸张进行画图就行了。

当然真正要打印时候还是要和打印机相关联的。

首先是获取打印机名称,C#打印需要指定打印机名称。

可以通过【PrinterSettings.InstalledPrinters】来获得你的机器上所有安装的打印机名称。可以通过遍历匹配找出你要的打印机名称。

其次在C#中建立打印文档对象printdocumet(pd)

然后把它的pd.PrinterSettings.PrinterName属性设置为你需要的打印机。

然后就是在pd的PrintPage 事件里面写打印代码。

另外你可以设置他的打印纸张。

关于C#打印的一些属性你可以查msdn上面有很详细的介绍。

另外,我个人觉得如果要做一个真正的商业软件是不会去借用其他的dll去写打印的,一个这不具有自主产权,在一个不和自己的具体应用情况,另外当需要改动时叶不好处理。所以最好是自己写打印程序。这个做起来不是很难,稍微写下就OK了。

你可以看下我这篇文章对你有帮助。

C#中调用C的DLL中的回调函数,想实现消息响应机制

反过来比较容易,因为C#的P/Invoke就是做这个的。但是显然C++没有关于C#代码回调的的实现,因为C++的架构从来也没考虑过还会调用C#(这种情况实在是太少见了,况且也不必要)。如果非要实现可以采用多进程,使用进程间通信。我想到的:

1.模仿linux中的管道(PIPE),产生虚拟文件,而C++阻塞直到文件产生或本身超时。这样可以实现数据交换,既能实现传数据又可以使C++程序及时得到通知。缺点就是IO密集,降低效率。

2.使用TCP通信,监听端口获取消息,这是跨平台程序通信最常用也是最正统的方法。一般是跨操作系统编程常用的,比如windows和linux ubuntu server程序进行交互。你所述情况虽然不算跨操作系统通信,但是也是跨平台了。而且想想就知道C++作为先出现的语言而且是编译型语言,调用C#托管区的函数还要设回调,其难度可想而知。

3.如果你的C++是基于winform的,可以在C#中P/Invoke调用winAPI的SendMessage发送窗体消息从而间接实现回调。

4.自然还有一些更底层的Dirty方法,比如嵌汇编更改上下文程序指针地址。。。不过不适合正统的程序,因为太Dirty啊。。。而且出错概率大。

除此之外,如果不采用多线程通信,C#的反射(reflection)特性可以参考,但是控制权依然在C#。况且C#无从知道C++的内部结构,自然难以直接调用。你想想吧,是不是这个道理~

怎样用java调用pos机??

1、首先,你得安装相应的打印机驱动(不通型号是不一样的)。

2、安装好驱动后你可以有两种选择

1)将POS机配置为默认打印机,使用操作系统的系统调用来完成打印机打印(POS机实际也是个打印机,自己排版的话jacob是个不错的选择)。

2)使用POS机提供的本地库,一般是dll动态链接库,使用java本地化方法调用JNI即可(一般会有接口方法说明文档)。

请问c#与刷卡机怎么进行交互(接触试刷卡机,就像超市用那种,一刷卡里信息就在屏幕上显示,怎么用c#来接

刷卡机读取信息的原理,就是扫码枪读信息。不用设置,插上扫码终端,条码符合规则的话,一过,就会自动触发回车事件。你可以开个记事本,用条码测试一下。

如果C#要交互,无非两种,1个是读取,1个是打印条码。读取就是接收它扫地那个数字,这个不用解释,打印就是下面的步骤:

1、方法库,刷卡机会自带开发人员操作SDK,里面会有操作的类库DLL,C#必须引用

2、接口,有COM,USB口等类型,也在SDK里会有说明

3、条码格式,code128是一个大众的编码规则,不过也有其他的,而且现在还有三维码,比如火车票的那个,要看刷卡机器能识别哪类的码,而且码的格式非常重要,不然,即使打出来也扫不出来。

4、根据这个码在数据库中会查询到信息才行。

如果这些都有了,就可以发送指令让条码机打印条码了。

用c++进行win32编程”动态调用DLL”内存出错的问题

正确的一段窗口(无视注释行)

#include windows.h

#include tchar.h

//#define colour RGB(0,144,76)

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 

void show();

INT32 iYX[2];

const int WX=800;

const int WY=600;

DWORD g_tPre=0,g_tNow=0;

HFONT hFont;

HPEN hPen;

INT32 i[2]={GetSystemMetrics ( SM_CXSCREEN )/2,GetSystemMetrics ( SM_CYSCREEN )/2};

HPEN hPenOld;

HWND hwnd ;

MSG msg={0} ;

WNDCLASS wndclass ;

HDC hdc ; 

PAINTSTRUCT ps ;

PAINTSTRUCT paintStruct;

HBITMAP g_hBitmap=NULL; 

HDC g_mdc=NULL;   

BOOL id=false;

POINT p;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)

{

 static TCHAR szAppName[] = TEXT (“HelloWin”) ;

     wndclass.style = CS_HREDRAW | CS_VREDRAW ; 

     wndclass.lpfnWndProc = WndProc ;

 wndclass.cbClsExtra = 0 ; 

 wndclass.cbWndExtra = 0 ;

 wndclass.hInstance = hInstance ;

 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; 

 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; 

 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; 

 wndclass.lpszMenuName = NULL ;

 wndclass.lpszClassName = szAppName ;        

 wndclass.hIcon =(HICON)::LoadImage(NULL,“icon.ico”,IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);

    if (!RegisterClass (wndclass))

MessageBox (  NULL, TEXT (“出错了!程序需要windows系统!”), szAppName, MB_ICONERROR) ;

return 0 ; 

}

//SetCursorPos(GetSystemMetrics ( SM_CXSCREEN )/2,GetSystemMetrics ( SM_CYSCREEN )/2);

hwnd =CreateWindow

( szAppName, TEXT (“”),

WS_POPUP ,

(GetSystemMetrics ( SM_CXSCREEN )/2)-150,(GetSystemMetrics ( SM_CYSCREEN )/2)-75,

300,150,

NULL,  NULL, hInstance,NULL); 

hdc =GetDC(hwnd);

    ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ; 

while( msg.message != WM_QUIT )

{

if( PeekMessage( msg, 0, 0, 0, PM_REMOVE ) )   

{

TranslateMessage( msg );

DispatchMessage( msg );

}

else

{

g_tNow= GetTickCount(); 

if(g_tNow-g_tPre = 100)        

show();

}

}

return msg.wParam ;

}        

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{           

switch (message)

case WM_CREATE: 

return 0 ;

break;

case   WM_DESTROY: 

PostQuitMessage (0) ;

return 0;

break;

 case WM_KEYDOWN:

if (wParam == VK_ESCAPE)   

DestroyWindow(hwnd);

case WM_LBUTTONDOWN:

DestroyWindow(hwnd);

return 0 ;

break;

default:

return DefWindowProc( hwnd, message, wParam, lParam );

return 0 ;

}

void show ()

{

GetCursorPos(p);

g_tPre = GetTickCount(); 

DeleteObject ( hFont );

}

通达信的调用dll函数编号7手机怎么建立的

这样就能实现在IE上直接对POS机进行操作。而我要封装的这个动态库,厂家只提供了一个单的动态库和一百多字的说明,也就是说明一下动态库中有机个函数和其对应的参数。也就是厂家就连动态库对应的头文件也没有提供。接到这个任务后,我第一想到的是用VC的ATL来实现它。你问我为什么要用ATL也不用别的,如CB、Delphi之类的。我只能说我觉得写ActiveX还是用VC好;况且还要对硬件进行操作,这样一来当然是用VC了。别说我没提醒你,用CB、Delphi之类的有可能会出现预想不到的惊奇。。。。现在让我带着进入正题吧!先用ATLCOMAppWizard生成一个名叫PosActiveX的工程,生成时系统会问你是生成DLL还是EXE。当然是DLL的了。生成好后加入一个接口叫IPosCtrl,当然了要在Web上用,所以生成的接口一定是要小所以选择LiteControl的。你可别问我怎么加入,如果这都不会,那我写的这文章是不适合你看的。所以等你学会加入接口后再看。接口加好后,我就要实现方法了。首先用接口一般都要对其进行初始化。所以加入一个叫Init(shortnCom)的接口方法,该方法完成加载DLL和DLL中的功能函数,还有就是打开对POS机进行操作的COM口;还有一个是修改POS机的时间的方法叫ModifyPosDT(BSTRbstrDT);还有个是清空POS机中数据的方法–EmptyPos()。最后,当你不想用时就要关闭所打开的COM口–Quit()。在生成接口IPosCtrl时同时会生成CPosCtrl类。我有个习惯,就是我一般是把实现方法都写在类中,而接口只时输出该类中你想输出的方法。所以在类中我就写了以下几个方法:InitDll()—-加载DLL库和其中的功能函数;ExitDll()—-卸载DLL库,用完后不卸载是在占用内存。所以它是少不了的。SetPosDateTime(char*pchDT)—设置POS机的时间。ClearPos()—-清空POS机中的记录。在类中我就写了这几方法了。在说一下我要输出的接口方法有:Iint(shortnCom)—-初化接口,为调用做准备。Quit()—-退出程序时,调用它退出接口调用。ModifyPosDT(BSTRbstrDT)—-设置POS机时间。EmptyPos()—-清空POS机数据。完了就这么多。现在来看看我的源程序吧!//PosCtrl.cpp:ImplementationofCPosCtrl#include”stdafx.h”#include”PosActiveX.h”#include”PosCtrl.h”///////////////////////////////////////////////////////////////////////////////CPosCtrl///////////////////////////////////////////////////////////////////////////////Police.dll所用到的常量定义/////////////////////////////////////////////////////////////////////////////#defineCom_UpRecord1#defineCom_UpPoliceLen2#defineCom_UpSimpleDataLen3#defineCom_UpSimplePunishLen4#defineCom_UpGeneralDataLen5#defineCom_UpGeneralPunishLen6#defineCom_EmptyPolice7#defineCom_EmptySimpleData8#defineCom_EmptySimplePunish9#defineCom_EmptyGeneralData10#defineCom_EmptyGeneralPunish11#defineCom_DownRecord0x80#defineCom_DownStreetCodeLen0x81#defineCom_DownBlackListLen0x82#defineCom_DownPeccancySimpleLen0x83#defineCom_DownPeccancyGeneralLen0x84#defineCom_DownDateTime0x85#defineCom_Exit0x86#defineCom_Init0x87#defineErr_UpSimpleDataLen0#defineErr_UpSimplePunishLen1#defineErr_UpGeneralDataLen2#defineErr_UpGeneralPunishLen3#defineErr_UpPoliceLen4#defineErr_UpRecord5#defineErr_DownStreetCodeLen6#defineErr_DownSimplePeccancyCodeLen7#defineErr_DownGeneralPeccancyCodeLen8#defineErr_DownBlackList9#defineErr_DownDateTime10#defineErr_EmptyData11#defineErr_GetCode12;#defineConst_Terminator0x20/////////////////////////////////////////////////////////////////////////////////#pragmadata_seg(“mydata”)staticHINSTANCEDLLInst=NULL;//动态库句柄#pragmadata_seg()//HANDLEhCom;//COM串口句柄///////////////////////////////////////////////////////////////////////////////////POLICE.DLL动态库函数功能定义/////////////////////////////////////////////////////////////////////////////////HANDLE(stdcall*Init_comm)(LPSTRstr);//初始化通信口BYTE(stdcall*Exit)(HANDLEhCom);//关闭通信口BYTE(stdcallProtocol)(HANDLEhCom,BYTEcmd,BYTElen,BYTE_dt,BYTE*prlen,BYTE*prdt);//通信协议BYTE(stdcall*Pipe_control)(HANDLEhCom,BYTEmode);//多路控制typedefBYTE(stdcall*Dev_escape)(HANDLEhCom);//断开多路控制///////////////////////////////////////////////////////////////////////////////CPosCtrl//—————————————————————————-////功能:加载POLICE.DLL动态库和其中的一些功能函数//输入/输出参数:无//版本:1.0//修改://—————————————————————————-//voidCPosCtrl::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//修改://—————————————————————————-//voidCPosCtrl::ExitDll(){if(DLLInst!=NULL)FreeLibrary(DLLInst);}//—————————————————————————-////功能:控件接口方法,对外提供关闭串口,释放动态库。//输入/输出参数:无//版本:1.0//修改://—————————————————————————-//STDMETHODIMPCPosCtrl::Quit(){//TODO:Addyourimplementationcodehere(*Exit)(hCom);ExitDll();::MessageBox(NULL,“关闭COM口成功”,“提示信息”,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;}//—————————————————————————-////功能:提供初化动态库的对外接口,并实现打开口串口的功能。//输入/输出参数:11–要打开的串口号。

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。