80分 关于C#下pos机打印的问题 为何要这么复杂,用GDI+更好呀 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不晓得,我用的writefile API,不晓得filestream有没有影响! 我平时常用的是web编程,现在突然遇到winform编程了,二楼和三楼的能否给个例子,最好详细点的~~~谢谢了 去网上找justinio.cs,基本能满足你的大部分需求! faint!仔细给你看了看!public void PrintLine(string str) { IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);///此处打开了,最后没有关闭!因此在打开的时候会产生错误!另外仔细看看你的0x40000000是不是正确的参数!关闭端口使用closehandle API,imports怎么写,自己查!CloseHandle(iHandle);//关闭文件流之后,添加这个!另外不建议你如此做!建议你先open,然后进行多个操作之后,最后close! xxuu503 能不能给个详细点的代码~~~我对api函数是新手~~~ [DllImport("kernel32.dll")] public static extern Int32 CloseHandle( IntPtr hObject ); //放在createfile函数后边声明一下public void PrintLine(string str) { IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0); if(iHandle.ToInt32() == -1) { } else { FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite); StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据 sw.WriteLine(str); sw.Close(); fs.Close(); } CloseHandle(iHandle); } xxuu503 我用你的方法试过了~~还是不行~~ 能给给详细解决方法吗?现金100元求最终解决方法,不知道可以吗 ~~~~~ QQ:34646139 直接联系我也可以 钱箱也一样,在那个位置上加上closehandle 原理是这样子的:像com和lpt口,在《windows高级编程》书里说:这个叫做内核资源,如果一个程序打开了它,而不关闭的话,即使程序退出了,资源也不会被释放!你写的printline函数,先打开,然后按流写入,关闭流,却没有关闭端口!下次printline的时候,自然无法打开端口,因为已经被打开了!我猜测你的结果就是如此:打印一个命令后(可能是一行),无法执行下一个指令! 如果成的话,希望你把100元给我,正缺网费呢!呵呵!Joke! 我说到做到~~~解决以后直接给我你的帐号~~~转帐费用我付我打印的时候不是只打印一行,而是打印了5-6行以后才中断的因为是pos机的打印机,不能使用printdocument来打印, public class LPTControl{[DllImport("kernel32.dll"]private static extern IntPtr CreateFile(string lpFileName,int 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,ref int lpNumberOfBytesWritten,ref int i);[DllImport("kernel32.dll")]private static extern bool CloseHandle(IntPtr hObject);IntPtr iHandle;//定义端口句柄public bool open()//打开端口{IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);//打开if(iHandle!=IntPtr(-1))return true;elsereturn false;}public bool Write(String Mystring)//写端口,返回true or false{return this.WriteFile(iHandle,System.Text.Encoding.Default.GetBytes(Mystring) ,System.Text.Encoding.Default.GetBytes(Mystring).length//查查看,不确定是这个属性 ,ref 0,ref 0);}public bool Close(){return this.CloseHandle(iHandle);}} 我现在在学校机房,没有.net环境和并口设备,你先测试一下,看看如何! 聊了半天,终于搞出正确答案了!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,ref int lpNumberOfBytesWritten,ref 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 ref i,ref x);}else{Throw new Exception("端口未打开!");}}public bool Close(){return CloseHandle(iHandle);}} xxuu503(2005年CSDN MVH|被逼考六级|安心找工作ing!):你的LPTControl类中的write方法:int i;OVERLAPPED x;byte() mybyte=System.Text.Encoding.Default.GetBytes(Mystring);return WriteFile(iHandle,mybyte,mybyte.Length ref i,ref x);i和x如何赋值啊?是不是i=0;x=new OVERLAPPED();? 全排列问题 【100分+200答谢分】谁做过p2p通讯的东西,进来给我指点指点 用ffmpeg给FLV视频加水印的源码 问一个超级菜鸟问题 网上银行读usb是怎么实现的 高手帮忙~!!!.Net2.0里给WebBrower浏览页面的RadioButton、CheckBox赋值问题 C# 如何获取到回收站里面的文件信息 详细列举正则表达式中 ?的用法。 函数返回值问题 使用VS。NET中的VC7.0时,如果不使用ME,编译出来的是NATIVE的代码而不是CIL吗? 求助!我该怎么办? 谁给说说decimal,double,single的区别,在什么时候用它们是最合适的?
{
IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);///此处打开了,最后没有关闭!因此在打开的时候会产生错误!另外仔细看看你的0x40000000是不是正确的参数!关闭端口使用closehandle API,imports怎么写,自己查!CloseHandle(iHandle);//关闭文件流之后,添加这个!另外不建议你如此做!建议你先open,然后进行多个操作之后,最后close!
我对api函数是新手~~~
( IntPtr hObject ); //放在createfile函数后边声明一下public void PrintLine(string str)
{
IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);
if(iHandle.ToInt32() == -1)
{
}
else
{
FileStream fs = new FileStream(iHandle, FileAccess.ReadWrite);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default); //写数据
sw.WriteLine(str); sw.Close();
fs.Close();
}
CloseHandle(iHandle);
}
能给给详细解决方法吗?现金100元求最终解决方法,不知道可以吗 ~~~~~ QQ:34646139 直接联系我也可以
{
[DllImport("kernel32.dll"]
private static extern IntPtr CreateFile(string lpFileName,
int 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,
ref int lpNumberOfBytesWritten,
ref int i
);[DllImport("kernel32.dll")]
private static extern bool CloseHandle(
IntPtr hObject
);IntPtr iHandle;//定义端口句柄public bool open()//打开端口
{
IntPtr iHandle = CreateFile(prnPort, 0x40000000, 0, 0, OPEN_EXISTING, 0, 0);//打开
if(iHandle!=IntPtr(-1))
return true;
else
return false;
}public bool Write(String Mystring)//写端口,返回true or false
{
return this.WriteFile(iHandle,System.Text.Encoding.Default.GetBytes(Mystring)
,System.Text.Encoding.Default.GetBytes(Mystring).length//查查看,不确定是这个属性
,ref 0,ref 0);
}public bool Close()
{
return this.CloseHandle(iHandle);
}
}
{
[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,
ref int lpNumberOfBytesWritten,
ref 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
ref i,ref x);
}
else
{
Throw new Exception("端口未打开!");
}
}
public bool Close()
{
return CloseHandle(iHandle);
}
}
你的LPTControl类中的write方法:
int i;
OVERLAPPED x;
byte() mybyte=System.Text.Encoding.Default.GetBytes(Mystring);
return WriteFile(iHandle,mybyte,mybyte.Length
ref i,ref x);
i和x如何赋值啊?是不是i=0;x=new OVERLAPPED();?