C#LPT inpout32.dll

我没有得到任何错误或exception。

一个窗口中的按钮:

private void button1_Click(object sender, EventArgs e) { ControlPort.Output(0x378, 0xff); } 

和inpout.dll接口:

 class ControlPort { [DllImport("inpout32.dll", EntryPoint = "Out32")] public static extern void Output(int adress, int value); } 

怎么了? D2上的LED一直亮着。

我有Windows 7 x64旗舰版。

对于x64,您应该使用“InpOutx64.dll”。

访问: http : //www.highrez.co.uk/Downloads/InpOut32/default.htm在那里你可以阅读更多并找到样品。

工作代码,如果有人需要它。

  using System; using System.Runtime.InteropServices; namespace ParallelPort { public class PortAccess { //inpout.dll [DllImport("inpout32.dll")] private static extern UInt32 IsInpOutDriverOpen(); [DllImport("inpout32.dll")] private static extern void Out32(short PortAddress, short Data); [DllImport("inpout32.dll")] private static extern char Inp32(short PortAddress); [DllImport("inpout32.dll")] private static extern void DlPortWritePortUshort(short PortAddress, ushort Data); [DllImport("inpout32.dll")] private static extern ushort DlPortReadPortUshort(short PortAddress); [DllImport("inpout32.dll")] private static extern void DlPortWritePortUlong(int PortAddress, uint Data); [DllImport("inpout32.dll")] private static extern uint DlPortReadPortUlong(int PortAddress); [DllImport("inpoutx64.dll")] private static extern bool GetPhysLong(ref int PortAddress, ref uint Data); [DllImport("inpoutx64.dll")] private static extern bool SetPhysLong(ref int PortAddress, ref uint Data); //inpoutx64.dll [DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen")] private static extern UInt32 IsInpOutDriverOpen_x64(); [DllImport("inpoutx64.dll", EntryPoint = "Out32")] private static extern void Out32_x64(short PortAddress, short Data); [DllImport("inpoutx64.dll", EntryPoint = "Inp32")] private static extern char Inp32_x64(short PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUshort")] private static extern void DlPortWritePortUshort_x64(short PortAddress, ushort Data); [DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUshort")] private static extern ushort DlPortReadPortUshort_x64(short PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "DlPortWritePortUlong")] private static extern void DlPortWritePortUlong_x64(int PortAddress, uint Data); [DllImport("inpoutx64.dll", EntryPoint = "DlPortReadPortUlong")] private static extern uint DlPortReadPortUlong_x64(int PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "GetPhysLong")] private static extern bool GetPhysLong_x64(ref int PortAddress, ref uint Data); [DllImport("inpoutx64.dll", EntryPoint = "SetPhysLong")] private static extern bool SetPhysLong_x64(ref int PortAddress, ref uint Data); private bool _X64; private short _PortAddress; public PortAccess(short PortAddress) { _X64 = false; _PortAddress = PortAddress; try { uint nResult = 0; try { nResult = IsInpOutDriverOpen(); } catch (BadImageFormatException) { nResult = IsInpOutDriverOpen_x64(); if (nResult != 0) _X64 = true; } if (nResult == 0) { throw new ArgumentException("Unable to open InpOut32 driver"); } } catch (DllNotFoundException) { throw new ArgumentException("Unable to find InpOut32.dll"); } } //Public Methods public void Write(short Data) { if (_X64) { Out32_x64(_PortAddress, Data); } else { Out32(_PortAddress, Data); } } public byte Read() { if (_X64) { return (byte)Inp32_x64(_PortAddress); } else { return (byte)Inp32(_PortAddress); } } } } 

当你弄错了,你不会得到一个例外,最多是蓝屏。 选择以下之一:

  • 你使用了错误的地址(0x3bc,0x2f8)
  • 你错误地连接了LED
  • 你闯进错误的博物馆拿到硬件

这个问题记录太差,无法帮助你解决这个问题。

我解决了旧笔记本电脑上Windows 2000上的LPT端口问题,无法设置数据端口(pin2-pin9)。

使用此导入的function:

 [DllImport("inpout32.dll", EntryPoint = "Out32")] public static extern void Out32(int address, int value); 

每次重启或重新启动Windows后,我都要调用此行:

 Out32(0x378 + 2, 0x00); 

这样端口就能正常工作。 我认为问题出在双向设置(控制端口位于0x37A的第6位)。