今天看了一段关于.net如何调用LPT1并口打印ZPL条码的代码,尝试了一下,可是结果怎么也调不好,麻烦各位高手指导一下,不胜感激!
我是新手麻烦能够具体一点哦!!!类的代码如下:
namespace Barcode_Print
{
    /// <summary>
    /// 本类使用说明:
    /// 将一行ZPL指令作为string参数传给write函数即可
    /// </summary>
    public class LPTControl
    {
        [StructLayout(LayoutKind.Sequential)]
        private struct OVERLAPPED
        {
            int Internal;
            int InternalHigh;
            int Offset;
            int OffSetHigh;
            int hEvent;
        }        [DllImport("kernel32.dll")]
        private static extern int CreateFile(
        string lpFileName,
        uint dwDesiredAccess,
        int dwShareMode,
        int lpSecurityAttributes,
        int dwCreationDisposition,
        int dwFlagsAndAttributes,
        int hTemplateFile
        );        [DllImport("kernel32.dll")]
        private static extern bool WriteFile(
        int hFile,
        byte[] lpBuffer,
        int nNumberOfBytesToWrite,
        out   int lpNumberOfBytesWritten,
        out   OVERLAPPED lpOverlapped
        );        [DllImport("kernel32.dll")]
        private static extern bool CloseHandle(
        int hObject
        );        private int iHandle;
        public bool Open()
        {
            iHandle = CreateFile("LPT1", 0x40000000, 0, 0, 3, 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("端口未打开!");
            }
        }        public bool Close()
        {
            return CloseHandle(iHandle);
        }
    }}default页面调用:
using Barcode_Print;public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        LPTControl.Write("^XA^FO20,20^FDZebraTest^FS^XA^FO20,50^BY3^BCN,70,Y,N,N^FDkingmuch^XZ");    }
}错误信息如下:编译错误 
说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误信息: CS0120: 非静态的字段、方法或属性“Barcode_Print.LPTControl.Write(string)”要求对象引用源错误: 行 15:     protected void Page_Load(object sender, EventArgs e)
行 16:     {
行 17:         LPTControl.Write("^XA^FO20,20^FDZebraTest^FS^XA^FO20,50^BY3^BCN,70,Y,N,N^FDkingmuch^XZ");
行 18: 
行 19:     }

解决方案 »

  1.   

    搞定了,引用错误!
    正确的应该是:
    {
          PrintToLpt lpt = new PrintToLpt();
         lpt.Open();
         lpt.Write("^XA^FO20,20^FDZebraTest^FS^XA^FO20,50^BY3^BCN,70,Y,N,N^FDkingmuch^XZ");
         lpt.Close();
    }
      

  2.   

    这样子的话只能在服务器上的打印机才能打印!
    因为你写的这个代码是在服务器端执行的!想条码打印还是用windows程序吧!
      

  3.   

    blog.csdn.net/dunao
    我上面有code 39,和code93源码
      

  4.   

    我测试时使用的是局域网上的打印机,即把LPT1换成网络打印机(网上共享的打印机)的路径,不管在服务器端还是在客户端都能够正常发送打印指令。
      

  5.   

    您好,
    "我测试时使用的是局域网上的打印机,即把LPT1换成网络打印机(网上共享的打印机)的路径,不管在服务器端还是在客户端都能够正常发送打印指令。"
    我也在尝试该做法,但不知道如果,我将LPT1换成//xxx.xxx.xxx.xxx/Generic(//局域网内的电脑IP地址/打印机名称)可否成功?
      

  6.   

    iHandle = CreateFile("\\100.100.100.100\Generic", 0x40000000, 0, 0, 3, 0, 0);
    运行值为 -1
    可请帮忙看看
      

  7.   

    楼主,PrintToLpt lpt = new PrintToLpt(); 可以?
      

  8.   

    楼主,你的NAMESPACE库类是写在哪的?是不是写成DLL?