我有一个应用程序打开一个打印机端口(它是一个条形码打印机),它可以在win XP上运行,但是当我切换到win7(64位)时,我遇到了问题。这是代码:
我正在使用此方法打开端口:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern SafeFileHandle CreateFile(
String pipeName,
uint dwDesiredAccess,
uint dwShareMode,
IntPtr lpSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
IntPtr hTemplate);
我称之为:
public void OpenPort(String portName)
{
if (String.IsNullOrEmpty(m_portName)) throw new Exception(SET_PORTNAME);
this.m_portName = portName;
pipeHandle = CreateFile(portName, GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, IntPtr.Zero);
}
会发生什么是pipeHandle.Close = false和pipeHandle.IsInvalid = true
这是将数据发送到端口的方法
private void WriteBytesToPrinter(byte[] dataBytes)
{
if (!IsPortOpen) throw new Exception(OPEN_PORT_ERROR);
using (FileStream fStream = new FileStream(pipeHandle, FileAccess.Write,
dataBytes.Length, true))
{
fStream.Write(dataBytes, 0, dataBytes.Length);
fStream.Flush();
fStream.Close();
}
}
我得到例外:
ArgumentException
Invalid handle.
Parameter name: handle
我真的很感激一些帮助。 感谢。
答案 0 :(得分:0)
您是否尝试在Win XP兼容模式下运行可执行文件?在Windows 7中新的Windows驱动程序模型可能会遇到一些问题。
答案 1 :(得分:0)
您指定的portName
是什么?你试过了吗?
pipeHandle = CreateFile("NONSPOOLED_LPT1", GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero,
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, IntPtr.Zero);