Inpout32 Dev-Cpp and Codebloks linking error

My x64 port of InpOut32
Post Reply
lope
New User
Posts: 4
Joined: Sun Jan 08, 2012 12:23 am

Inpout32 Dev-Cpp and Codebloks linking error

Post by lope »

Hi! sorry about my english but I am from spain, I have recenly started to work with Impout32 and I have some problems in order to get it working...

1. At first, I have downloaded the last version of Inpout32 from here http://www.highrez.co.uk/Downloads/InpOut32/default.htm

2. Installed the "Installdriver.exe" file as admin, it returned "Succesfuly installed and opened 64bit inpout driver Inpout64.sys"

3. Then I have created a new proyect on Dev-Cpp, with inpout32.lib on the same folder.
May should use inpoutx64.lib? My pc is an AMD Atholon II runing a 64bit version of Windows 7 ultimate
Well, I have created a really easy try program on Dev-Cpp, here the code:

Code: Select all

#include <stdio.h>
#include <stdlib.h>

void	_stdcall Out32(short PortAddress, short data);
short	 _stdcall Inp32(short PortAddress);

int main(){

Out32(0xCD00,255); // yes! my LPT is on 0xCD00
return 0;

}
 

When I try to compile it gives an error "[Linker Error] undefined reference to `Out32(short, short)@8'"
I try to link on Proyect Options/Additional options on comand line/Linker -> Add Library or object. adding the inpout32.lib but it doesn´t work, the same error... and the same on CodeBloks compiler.

May I should link not adding the inpout32.lib but with some like -lxxx linker comand?

I have been looking for a solution for a long time, hope you can help me, and sorry again about my bad english... :oops:
User avatar
phil
Site Admin
Posts: 7670
Joined: Sun Apr 06, 2003 11:12 pm

Re: Inpout32 Dev-Cpp and Codebloks linking error

Post by phil »

Sorry but Im not familiar with the compilers you are using. I've only ever used MS C++ compilers.
However, I would expect it to be similar, and adding the InpOut32.lib to the linker options (additional libraries) should do the trick.

Having said that, when I use InpOut32 I don't use the LIB to link to the DLL. I use runtime linking, with LoadLibrary, GetProcAddress etc. which means the DLL can be easily replaced with no re-compiling.

You only need to use the x64 library if your building in x64 mode (I presume your not?).

Other than that I don't really know what to suggest. Have you looked at the c++ example on the website?

Thanks,
Phil
--[ Phil ]--
--[ Administrator & XMBC Author ]--
Logitech G9/G604/M720/MX518, Microsoft Intellimouse, Trust 16341 BT Mouse
Windows 10 x64, AMD Ryzen 5900x, MSI x570 Tomahawk, 32GB DDR4,
nVidia RTX 2070s, Evo 970 1Tb NVME, 2x2TB WD Black (RAID1)
lope
New User
Posts: 4
Joined: Sun Jan 08, 2012 12:23 am

Re: Inpout32 Dev-Cpp and Codebloks linking error

Post by lope »

OK problem solved, I couldn´t get inpout32.lib linked to my proyect, or if I could, It doesnt work anyway, so I tried as you said with runtimelinking, so I used this code created for the old version of Impout32 and it works perfectly!!

Code: Select all

#include <stdio.h>
#include <conio.h>
#include <windows.h>

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

int main(void)
{
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;

  
     int i;
     hLib = LoadLibrary("inpout32.dll");
     if (hLib == NULL) {
          printf("LoadLibrary Failed.\n");
           Sleep(2000);return -1; Sleep(2000);
     }
     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
     if (inp32 == NULL) {
          printf("GetProcAddress for Inp32 Failed.\n");
          Sleep(2000); return -1; Sleep(2000);
     }
     oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
     if (oup32 == NULL) {
          printf("GetProcAddress for Oup32 Failed.\n");
           Sleep(2000);return -1; 
     }
     /* Aqui va tu codigo */
     i=0xCD00;
    
    (oup32)(i,0);
    Sleep(2000);
    
     
    
     /* Aqui termina tu codigo */
     FreeLibrary(hLib);
     return 0;
}
If I execute the program on another machine it should auto-install the driver, or it can work only with inpout32.dll on the same folder?? It should work on a 32 and 64bit machine not? my application is compiled on 32 bits!
User avatar
phil
Site Admin
Posts: 7670
Joined: Sun Apr 06, 2003 11:12 pm

Re: Inpout32 Dev-Cpp and Codebloks linking error

Post by phil »

Im glad the runtime linkage is working for you.

The driver needs administrative permission to be installed. That is why I created InstallDriver.exe which requests admin elevation on Vista/Win7. You should be able to call this exe (or the DLL directly) from an installer of some sort.

The driver is embedded in the DLL and at first run the relevate driver file (x86 or x64) is extracted from the resources and installed, where it will be placed in the system32\drivers folder. From then on, it no longer needs admin elevation to run.

The source code of the DLL is available on the website if you need more info as to how this works!

The DLL needs to be in the path somewhere, but ideally along side your executable as that is where the runtime will look first (and it means if another DLL with the same name exists, it will avoid confusion).

Thanks,
Phil
--[ Phil ]--
--[ Administrator & XMBC Author ]--
Logitech G9/G604/M720/MX518, Microsoft Intellimouse, Trust 16341 BT Mouse
Windows 10 x64, AMD Ryzen 5900x, MSI x570 Tomahawk, 32GB DDR4,
nVidia RTX 2070s, Evo 970 1Tb NVME, 2x2TB WD Black (RAID1)
lope
New User
Posts: 4
Joined: Sun Jan 08, 2012 12:23 am

Re: Inpout32 Dev-Cpp and Codebloks linking error

Post by lope »

So you are the creator of this library?? wow! awersome work!! congratulations!

Ok so if I execute the code I have post before on another machine as admin, as I am using the dll on runtime link it should install the driver the first time I do it, I dont need to call any other funcition of the dll or something like that?
User avatar
phil
Site Admin
Posts: 7670
Joined: Sun Apr 06, 2003 11:12 pm

Re: Inpout32 Dev-Cpp and Codebloks linking error

Post by phil »

No I did not create InpOut32, I only ported the driver and DLL to 64bit (x64) windows using the original source on the Logix4U.net website (the author).

I think if I recall correctly, you only have to load the DLL. That should do the work of installing the driver. There are some helper functions exported from the DLL, like "IsInpOutDriverOpen()" that you can call to verify the driver is loaded and running but they are not necessary for installation.

Take a look in the header provided in the binaries download for a list of all the functions and their call prototypes.

Thanks,
Phil
--[ Phil ]--
--[ Administrator & XMBC Author ]--
Logitech G9/G604/M720/MX518, Microsoft Intellimouse, Trust 16341 BT Mouse
Windows 10 x64, AMD Ryzen 5900x, MSI x570 Tomahawk, 32GB DDR4,
nVidia RTX 2070s, Evo 970 1Tb NVME, 2x2TB WD Black (RAID1)
lope
New User
Posts: 4
Joined: Sun Jan 08, 2012 12:23 am

Re: Inpout32 Dev-Cpp and Codebloks linking error

Post by lope »

OK sorry, I allready now you just ported the driver and dll but I feel very thaksfull because is dificult to find libreries for parallel port programing sice modern computer arent using parallel ports, I was using a partition of my pc with winxp (using Logix4U inpout32) and another with ubuntu for years before I found this dll.

I am creating something like a programable card with an eprom by parallel port for my computing class so now I have to create the control software in order to read/write data from it, when finished I will be back and will tell you how have it gone.

Thanks another time!
Post Reply