C # LPT inpout32.dll

I do not get any errors or exceptions.

Button in one window:

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

and inpout.dll interface:

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

What's wrong? The LED on D2 is on all the time.

I have Windows 7 x64 Ultimate.

+6
c # parallel-port
source share
4 answers

For x64 you should use "InpOutx64.dll".

Visit: http://www.highrez.co.uk/Downloads/InpOut32/default.htm There you can read more and find samples.

+5
source share

Work code, if someone needs it.

  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); } } } } 
+5
source share

You will not get an exception when you get it wrong, no more than a blue screen. Choose one of:

  • you are using the wrong address (0x3bc, 0x2f8)
  • you incorrectly connected the LED
  • You broke into the wrong museum to get hardware.

The question is too poorly documented to help you with this.

+3
source share

I solved the problem with the LPT port in Windows 2000 on my old laptop, where it is impossible to set the data port (pin2-pin9).

Using this imported function:

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

after every reboot or reboot of Windows I have to call this line:

 Out32(0x378 + 2, 0x00); 

for the port to work correctly. I think the problem is in bidirectional settings (control port on the 6th bit at 0x37A).

+1
source share

All Articles