Click here to Skip to main content
13,289,242 members (57,851 online)
Click here to Skip to main content
Add your own
alternative version


81 bookmarked
Posted 1 Aug 2006

Reading from Parallel Port using Inpout32.dll

, 8 Aug 2006
Rate this:
Please Sign up or sign in to vote.
Using the Signal Port to read in data instead of Data Port


This is a good tutorial about interfacing with the parallel port; more inportantly reading from the port. Other articles I've seen only shown how to write to the port.

Before I get ahead of myself, the parallel port I used is an ECP (<!--?xml:namespace prefix = st1 /-->Extended Capability Port). Find out if your port is the same as mine, yours could be an EPP or SPP.

Go to “Control Panel / System / Hardware Tab / Device Manager / Ports (Com & LPT) / Printer Port (LPT1 or LPT2) /”

It should indicate what type you have. You can also go to the ‘Resource’ Tab to indicate the range of your port: mine is I/O Range 0378 – 037F, ignore the other I/O range.

For the ECP, there are some over headers if I was to use the data port as both input and output. Instead, I used the signal port for data processing.

If by any odd reason you don't understand the tutorial. Please refer to the explaination towards the bottom of the page. Or just email me.

Note that all information regarding the inpout.dll is on

Please Vote so I can get an indication weither it's worth my time to update.


As mention before, I used a DMM to test out the ports (nothing connected to the ports yet) and I used the read function from the inpout32.dll, .ie In(Port Address), my particular port address was:

[Data Port] Addres: 0x378H or in VB Express &H378S

[Status Port] Addres: 0x379H or in VB Express &H379S

[Control Port] Addres: 0x37AH or in VB Express &H37AS

*note these port address are in HEX

Data PinsStatus PinsControl Pins
Pin 9: D7Pin 10: S6Pin 1 : C0
Pin 8: D6Pin 11: S7Pin 14: C1
Pin 7: D5Pin 12: S5Pin 16: C2
Pin 6: D4Pin 13: S4Pin 17: C3
Pin 5: D3Pin 15: S3
Pin 4: D2  
Pin 3: D1  
Pin 2: D0  

Tutorial #1

Note that this was done in VB 2005 Express Edition.

The 1st Tutorial: Writing to the 'data' port and reading what we wrote on it.

The 2nd Tutorial: Reading from the 'status' port externally.

Step 1: Basically; once you download the inpout32.dll file. Copy it to your system directory. .ie C:\WINDOWS\system32

Step 2: Then in VB; Open a New File

Step 3: In the text box, write a name for this project. I called my 'Port_Testing'

Step 4: "Drag" a button to your form window and then "Double Click" on the button.

Step 5: Once your in the code editor declare this at follows at the beginning of your code:

Option Strict Off

Option Explicit On

Module InpOut32_Declarations

'Inp and Out declarations for port I/O using inpout32.dll.

Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short

Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)

End Module

Step 5: Scroll down to the 'event handler,' of Button1.

Public Class Form1

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

End Sub

End Class

Step 6: Now within the event handler code, write the next following three lines of code:

Out(&H378S, &HFFS) 'Print '1' to D7-D0 or 255 in Decimal

Dim Value1 As String 'String named Value1

Value1 = Inp(&H378S) 'Now Value1 has the values in 'data port'

MessageBox.Show(Value1) 'A popup will indicate the current value written

Step 7: Run It!!! Using 'F5 Key' or going to 'Debug/Start Debugging.'

Here is the result of our hard earn work! 255 should appear on the messagebox. If not, you screwed up. Go back and repeat. To see different results you can also modify the code by writing in any other number in hex within the 'Out(&H378S, [HEX CODE: Only from &H0S to &HFFS ]).' *Note that the range is 0 (zero) to FF hex & not O.

Tutorial #2

Step 1: If you haven't gone through Tutorial #1 and your a novice. I suggest that you should scroll up.

Step 2: Go to the 'Design Tab' and drag another button to the form window.

Step 3: Next, double click on it and then add the following code in the 'eventhandler' for Button2.

Dim Value2 As String 'String named Value2

Value2 = Inp(&H379S) 'Now Value2 has the values in 'signal port'

MessageBox.Show(Value2) 'A popup will indicate the current value written

Step 4: Run It!!! Press F5 or go to Debug/Start Debugging.

Step 5: Click on Button2 and watch for the popup window. It should read 120 Decimal.


What are Hex, Bin, Dec?

They are representations of numbers at differnt bases.

Hex = Hexidecimal Numbers (Base 16)

Bin = Binary Numbers (Base 2)

Dec = Decimal Numbers (Base 10)

We are most familar with base 10 since we count in decimal however computers are only familary with base 2; .ie 1's and 0's or 'on' and 'off.' I'm not going to elaborate more than this. To change between bases, simply use Microsoft Calculator that is already built in. Just remember to change it from the 'Standard View' to the 'Scientific View.' Write in the numbers and then simply click on what base you would like to see the number represent in.

Using the Status Port?

In Tutorial #1; we saw the MessageBox popup window showing a value of 255. You might ask yourself, why is that. First of all, DUH! We wrote 255 Decimal or FF Hex to it and ofcourse we can write anything else (0 - FF).

In Tutorial #2; we saw the MessageBox popup window showing a value of 120. Again you might as yourself, why is that. The answer is not as obvious. You might think the value should be '0' since we wrote nothing to it & we didn't connect anything to our parallel port yet. The answer is that Bit 7 (S7) of the signal port is inverted! (Ahhhhh) and S7 - S3 are always high enable. (Yes!)

S7' = 1' = 0

S6 = 1

S5 = 1

S4 = 1

S3 = 1

S2 = 0

S1 = 0

S0 = 0

01111000bin = 120dec

So you might ask yourself, how do we use the status port!!!

Just tie any of your status pins (any red pin) to ground (any green pins) and you should see a value change when you run my program again.

You see, on the status line; the pins are 'high' .ie 5V. To enble them for reading purpose you'll have to ground your status pins. (OOOOOHHH!!!)


Example 1: Nothing Connected to Status Pins

The result should be: 120


Example 2: Status Port (S7), pin 11 is grounded

The result should be: 248


Example 3: Status Port (S5), pin 12, is grounded

The result should be: 88


Comments & Sourcecode

There you go! I know this was very long, but I hoped it helps. If you need the code, I’ll be happy to share. It’s in VB Express although.

Email me at for questions.



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

United States United States
No Biography provided

You may also be interested in...


Comments and Discussions

QuestionReading port status change event Pin
sairfan113-Dec-09 4:58
membersairfan113-Dec-09 4:58 
GeneralIt is working in vb 2008 also Pin
Harshadwasu15-Nov-09 8:49
memberHarshadwasu15-Nov-09 8:49 
GeneralRe: It is working in vb 2008 also Pin
momina sheikh1-Oct-12 9:26
membermomina sheikh1-Oct-12 9:26 
Generalhi this code really works Pin
fred0702-Oct-09 17:08
memberfred0702-Oct-09 17:08 
GeneralRe: hi this code really works Pin
momina sheikh1-Oct-12 9:35
membermomina sheikh1-Oct-12 9:35 
QuestionCan not work normally Pin
Rick Pan21-Apr-09 6:27
memberRick Pan21-Apr-09 6:27 
AnswerRe: Can not work normally Pin
fred0702-Oct-09 17:09
memberfred0702-Oct-09 17:09 
GeneralRe: Can not work normally Pin
momina sheikh2-Oct-12 3:26
membermomina sheikh2-Oct-12 3:26 
you mean bin is folder and debug is a folder inside it and where is bin located...
Actually when i run the code the SHE exception comes on pressing the buttons...what should i do.
GeneralPIC based project Pin
maelan09141-Jan-09 4:38
membermaelan09141-Jan-09 4:38 
GeneralS0, S1 and S2 Pin
javier_nicolasYahoo7-Dec-08 9:04
memberjavier_nicolasYahoo7-Dec-08 9:04 
Generalinout32.dll not working Pin
bobbyaryan1604-Dec-08 21:01
memberbobbyaryan1604-Dec-08 21:01 
Generalcontling micrcontroller Pin
bobbyaryan16023-Nov-08 20:30
memberbobbyaryan16023-Nov-08 20:30 
Generalwe screwed up - general hang Pin
mackel0111-Sep-08 14:28
membermackel0111-Sep-08 14:28 
GeneralRe: we screwed up - general hang Pin
Aimica10-Sep-10 8:56
memberAimica10-Sep-10 8:56 
Generaladd button switch Pin
Qurex16-Jun-08 1:20
memberQurex16-Jun-08 1:20 
Generalit's not working :S Pin
malalation29-Feb-08 18:21
membermalalation29-Feb-08 18:21 
GeneralRe: it's not working :S Pin
Petey14-May-08 7:15
memberPetey14-May-08 7:15 
QuestionCan i receive data with event? Pin
amir1928-Oct-07 8:26
memberamir1928-Oct-07 8:26 
AnswerRe: Can i receive data with event? Pin
Pablo Romano2-May-09 19:11
memberPablo Romano2-May-09 19:11 
QuestionStill have inpout3.dll? Pin
Ariston Darmayuda27-Jul-07 19:14
memberAriston Darmayuda27-Jul-07 19:14 
AnswerRe: Still have inpout3.dll? Pin
citizen_runner23-Nov-07 7:26
membercitizen_runner23-Nov-07 7:26 
AnswerRe: Still have inpout3.dll? Pin
gsuspradeep19-Dec-09 18:04
membergsuspradeep19-Dec-09 18:04 
Questionparallel port input Pin
dannydy29-May-07 22:53
memberdannydy29-May-07 22:53 
AnswerRe: parallel port input Pin
rigidigi3-Jul-07 2:40
memberrigidigi3-Jul-07 2:40 
GeneralRe: parallel port input Pin
dannydy3-Jul-07 8:20
memberdannydy3-Jul-07 8:20 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile
Web04 | 2.8.171207.1 | Last Updated 8 Aug 2006
Article Copyright 2006 by phebejtsov
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid