让更多的人知道如何用C#操作斑马条码打印机
下面是我开发的条码打印程序用到的条码打印类
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace Barcode
{
/*条码打印命令说明
^XA //条码打印指令开始
^MD30 //设置色带颜色的深度, 取值范围从-30到30
^LH60,10 //设置条码纸的边距
^FO20,10 //设置条码左上角的位置
^ACN,18,10 //设置字体
^BY1.4,3,50 //设置条码样式。1.4是条码的缩放级别,3是条码中粗细柱的比例, 50是条码高度
^BC,,Y,N //打印code128的指令
^FD12345678^FS //设置要打印的内容, ^FD是要打印的条码内容^FS表示换行
^XZ //条码打印指令结束
*/ //上面的指令会打印12345678的CODE128的条码
public class BarcodePrint
{
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
private struct OVERLAPPED
{
int Internal;
int InternalHigh;
int Offset;
int OffSetHigh;
int hEvent;
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern int CreateFile(string lpFileName, uint dwDesiredAccess, int dwShareMode, int lpSecurityAttributes, int dwCreationDisposition, int dwFlagsAndAttributes, int hTemplateFile);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool WriteFile(int hFile, byte[] lpBuffer, int nNumberOfBytesToWrite, out int lpNumberOfBytesWritten, out OVERLAPPED lpOverlapped);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool CloseHandle(int hObject);
private int iHandle;
public bool Open()
{
iHandle = CreateFile("LPT1:", (uint)FileAccess.ReadWrite, 0, 0, (int)FileMode.Open, 0, 0);
if (iHandle != -1)
{
return true;
}
else
{
return false;
}
}
public bool Write(string Mystring)
{
if (iHandle != -1)
{
int i;
OVERLAPPED x;
byte[] mybyte = System.Text.Encoding.Default.GetBytes(Mystring);
return WriteFile(iHandle, mybyte, mybyte.Length, out i, out x);
}
else
{
throw new Exception("LPT1端口未打开!");
}
}
public bool Close()
{
return CloseHandle(iHandle);
}
}
}
如何打印中文见下:使用GETFONTHEX函数
函数使用之C#原型:
[DllImport("fnthex32.dll")]
public static extern int GETFONTHEX(
string BarcodeText,
string FontName,
string FileName,
int Orient,
int Height,
int Width,
int IsBold,
int IsItalic,
StringBuilder ReturnBarcodeCMD);
调用打印汉字,下面代码将会打印“测试”二个汉字
string sBarCodeCMD = ""; //条码打印命令
StringBuilder sb1 = new StringBuilder(10240);
int i1;
i1 = GETFONTHEX("测试","宋体","temp1",0,30,20,0,0,sb1);
sBarCodeCMD = sb1.ToString() + "^XA^MD30^LH20,20^FO20,20^XGtemp1,1,1^FS^XZ";
=======================================================================================
调用后出现:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”的提示
我最开始不会用时,也遇到过这个提示
函数使用之C#原型:
[DllImport("fnthex32.dll")]
public static extern int GETFONTHEX(
string BarcodeText,
string FontName,
string FileName,
int Orient,
int Height,
int Width,
int IsBold,
int IsItalic,
StringBuilder ReturnBarcodeCMD);
注意函数原型声明在C#中是这个样子
若打错了,可能会有错吧
再注意我是将fnthex32.dll文件放在我开发的条码软件的安装目录下的
不知是否有这原因,你可试试
最后
StringBuilder sb1 = new StringBuilder(10240);
如果StringBuilder的容量设置太小,可能会出错
我在用时
StringBuilder sb1 = new StringBuilder(1024);
就出现过错误
我改为
StringBuilder sb1 = new StringBuilder(2048);
错误就消失了
以上是我使用时遇到的一些问题及我的解决方法,请参考
=============================================================
不知哪个“temp1”如何使用?
调用打印汉字,下面代码将会打印“测试”二个汉字
string sBarCodeCMD = ""; //条码打印命令
StringBuilder sb1 = new StringBuilder(10240);
int i1;
i1 = GETFONTHEX("测试","宋体"," temp1 ",0,30,20,0,0,sb1);
sBarCodeCMD = sb1.ToString() + "^XA^MD30^LH20,20^FO20,20^XG temp1 ,1,1^FS^XZ";
注意红色的temp1,
如果前面是temp1,后面就应该是temp1
如果前面是temp2,后面就应该修改为temp2
========================================================================================
fnthex32.dll 有两个版本一个8个参数和9个参数的,此例要用到9参数的。如果选错了dll会出现前面所说的调用后出现:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”的提示。
让更多的人知道如何用C#操作斑马条码打印机相关推荐
- 分享经验,让更多的人受益
最近由于失业,所以特别多想法.在这段时间里有着很多很多想法,今天先把它记住.今天的主题是"分享经验,让更多的人受益".找工作碰壁了,发现了最近几年来所学到知识跟社会出现一定的脱轨现 ...
- 苹果手机iphone丢失被诈骗经历,警醒更多的人
本人朋友于2020年12月25日在陕西省西安市大寨路等待公交的过程中手机被盗,下面讲述下盗窃诈骗的经历,提醒更多的人警醒. 手机丢失后定位出现在陕西省西安市太和路紫薇东进2期 由于设置了丢失模式并设置 ...
- 怎么让更多的人填写问卷?
解决了调查问卷制作这个难题,怎么让更多的人填写又是一个让人头大的难题.那有什么好的方式可以帮助我们尽可能地让更多的人填写问卷额,我整理了以下方法: 1.调查问卷尽可能做的美观一些. 设想一下,如果我们 ...
- 为什么工作让某些人快乐,让更多的人痛苦?
为什么爱情让一些人快乐,却让另些人烦恼?为什么工作让某些人快乐,让更多的人痛苦?其实快乐和悲伤并不在于事本身,而在于经历事的人.有些人太聪明太认真,就会陷入各种痛苦.聪明的林妹妹一辈子流泪,傻傻的还珠 ...
- 爱眼护眼的倡导者,康瞳护眼吧引领更多的人关注眼部健康
爱眼护眼的倡导者,康瞳护眼吧引领更多的人关注眼部健康#微信热点#康瞳护眼膏@百收网SEO 大家早上好有好消息告诉大家 人民日报连续❷大版面报道
- 网络版EXCEL订单业务系统实战(多人网络同时分权限操作同一个EXCEL文件)-张涛-专题视频课程...
网络版EXCEL订单业务系统实战(多人网络同时分权限操作同一个EXCEL文件)-99人已学习 课程介绍 课程以一个外贸公司订单业务为背景,系统的讲解了一个基于公司原有EXCEL模版为基 ...
- 如何用java操作Redis缓存设置过期时间
如何用java操作Redis缓存设置过期时间?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获. 在应用中我们会需要使用red ...
- 华为怎么分屏操作技巧_糖豆人终极淘汰赛扒拉怎么操作 扒拉抓人技巧介绍
糖豆人终极淘汰赛扒拉怎么操作?游戏中拉拔抓人是玩家们都会的基础操作,但是总会有抓空的时候,甚至还导致自己失败了,那么下面带来扒拉抓人技巧介绍,快一起来了解一下吧. 糖豆人终极淘汰赛相关推荐: 糖豆人终 ...
- 信息论与编码课件,希望传播给更多的人
可能有些图片打不开,链接:https://pan.baidu.com/s/1azDGIkaZRVKbMMGHacNucw 提取码:1111 附上链接,传播知识,知识无 ...
最新文章
- 侠客X官方网站成立,第一个内测版本即将放出,敬请期待.
- php和python和java-python和java,php,c,c#,c++的对比
- “蚂蚁漫步”背后的定位原理思考
- mysql-数据库操作-连接-创建-删除-修改编码-查询-切换
- python合并word全部_python:怎样合并文档中有重复部分的行?
- Xamarin 设置可接受的版本
- OpenCV模板匹配方法原理
- 密码领域专用语言 ZUC算法
- 信息学奥赛研究1:竞赛时间表、学习规划
- 结合模电分析电流源电路(简单晶体管电流源,Howland电流源,压控电流源)
- java休闲游戏背景音乐推荐_休闲益智类游戏背景音乐推荐
- 联想和柳传志的5G标准投票辩白和抗争为啥那么苍白?
- 钉钉机器人关键字自动回复_【原创新软件】办公引流机器人个人微信企业微信QQ通用的自动回复,群发助手...
- x20手机科学计算机,360手机N4 跑分遭泄露 Helio X20名不虚传
- “8421码 5421码 2421码 余3码”区别
- R语言随机抽样sample
- Mendix敏捷开发零基础学习《二》-进阶(Microflow微流、表单验证、运算符、条件判断、数据嵌套、触发器、Debug问题跟踪、版本管理)
- R语言基于lm模型构建线性回归模型(蟋蟀的鸣叫声与温度的关系)、计算回归模型的RMSE指标、计算回归模型的R方指标(R-squared)
- JavaScript创始人Brendan Eich访谈录(转)
- ubuntu apt 下载所有依赖包
热门文章
- Android studio模拟器尺寸和真机不一样的原因
- 联通云的七大“场景云”,能让用户实现云计算自由吗?
- python入门三剑客怎么样_python三剑客
- word文档中的页码问题
- 丽思·卡尔顿:是如何创造出忠诚顾客人均120万美元的终身消费的?
- 主动推迟面试时间是面试的大忌
- 分享一个短视频在线去水印接口
- mybatis-plus中and和or的使用
- 【絮叨.1】同时在写四门语言是怎样一种体验?
- linux sda sda1区别,linux – / dev / sda和/ dev / sda1之间的区别