【问题标题】:Does inpout32.dll/inpoutx64.dll handle I/O to/from all parallel ports?inpout32.dll/inpoutx64.dll 是否处理所有并行端口的 I/O?
【发布时间】:2013-05-31 19:22:44
【问题描述】:

几天的研究和编程使我尝试了 inpout32.dll 和 inpoutx64.dll 的所有变体:二进制文件、源代码、32 位、64 位、地址包装器。无效:端口的输出位没有变化。

但是,我知道这是可能的,因为使用另一个进行并行端口输出的商用程序,我可以通过传递 0 到 255 之间的值来检测所有八个输出位 (D0-D7) 上的触发(状态变化) ,正是我想在自己的应用程序中做的事情。

我至少遵循了以下页面中的所有建议:

我使用的是 Windows 7,64 位;我的 SIIG Cyber​​pro 端口映射为地址 0xCCD8 处的 LPT3,地址 0xCCD4 处有四个状态位。我在 0x0378 处有另一个 ECP 打印机端口映射为 LPT1,但这也不起作用。

我知道最好不要尝试在 Win7 上直接调用 _inp()、_outp()。

谁能帮忙?

如果我需要下载和修改驱动代码,我可以这样做,但我认为应该没有那么难。

我的最终版本代码使用 32 位编译,连接到 inpout32.dll:

using System;
using System.Runtime.InteropServices;

namespace ParallelPort
{
    public class PortAccess
    {
        //inpout.dll

        [DllImport("inpout32.dll")]
        private static extern void Out32(ushort PortAddress, short Data);

        [DllImport("inpout32.dll")]
        private static extern short Inp32(ushort PortAddress);

        private ushort _PortAddress = 0;

        public ushort PortAddress { get { return _PortAddress; } }

        public PortAccess(ushort portAddress)
        {
            _PortAddress = portAddress;

            short result = 0;
            try
            {
                result = Inp32(portAddress);
            }
            catch (DllNotFoundException e)
            {
                throw new ArgumentException("Unable to find InpOut32.dll");
            }
            catch (BadImageFormatException)
            {
                result = 0;
            }

            if (0 == result)
                throw new ArgumentException("Unable to open parallel port driver");
        }

        //Public Methods
        public void Write(ushort Data)
        {
            Out32(_PortAddress, (short)Data);
        }

        public byte Read()
        {
            return (byte)Inp32(_PortAddress);
        }
    }
}

【问题讨论】:

  • 您犯了一个标准错误,即没有解释您如何知道它不起作用。术语“集电极开路输出”对您没有任何意义,然后前往 electronics.stackexchange.com 并询问如何检查并行端口是否工作。
  • 对不起,我累了。我忘了。答案是:我有第二台带有数据读取器/收集器的计算机,它将每个并行端口输出位显示为移动定时图上的彩色线。使用一些写入端口的商业软件,我可以选择一个字节的值来写入;我可以在图表上单独设置和识别每个位。使用我的软件(反映专有商业软件),我看不到输出出现,即使我做与商业软件“相同”的事情,写一个字节。我无法知道 comm-sw 是如何做到的。

标签: c# windows driver parallel-port


【解决方案1】:

仅供参考:

当我添加时

 [DllImport("inpout32.dll")]
 private static extern void DlPortWritePortUshort(ushort PortAddress, ushort Data);

并调用该函数而不是 Out32(ushort addr, ushort value) 代码有效。

我不知道为什么确切的界面很重要,但确实如此;也许这确实是因为 16 位端口地址上的符号扩展,正如建议的 [某处待定]。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2011-08-07
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多