Avatar billede larsfrom Nybegynder
30. november 2005 - 22:26 Der er 2 kommentarer

"WinIo" DLL / skrivning til printerport

Jeg sidder og arbejder med at skrive til printerportens control register eller, Toggle pin 14 / 17, der er i forbindelse med et I/O kort jeg leger med.

Jeg har fundet en Dll der WinIo.dll, der skulle kunne hjælpe mig med dette.
http://www.internals.com/utilities_main.htm

men jeg kan ikke rigtig få det til at virke.
Der er et lille test program med sammen med DLL filen, og det virker, så det er mig der koger rundt i det.

Har siddet og ledt efter eksmpler på nettet og har læst i C++ grundbog af Henrik Tange.

DLL filen bliver læst Explicit.

Mit spørgsmål lyder lidt på Filen læses rigtig nok ind, da det er første gang jeg arbejder med DLL filer.

Koden:

//*************** Header fil ************************

public:       
typedef bool (*MYPROC)(WORD,DWORD,BYTE);
typedef bool _stdcall (*MYPROC_1)();
typedef bool _stdcall (*MYPROC_2)(PSTR, bool);
typedef bool _stdcall (*MYPROC_3);

//**************** CPP Fil ****************************

int Get_test_1 = 0;  // Test værdi for debug
int Get_test_2 = 0;  // Test værdi for debug
int Get_test_3 = 0;  // Test værdi for debug

bool CTRL_1 = true;  // Test værdi for debug
bool CTRL_2 = true;  // Test værdi for debug
bool CTRL_3 = true;  // Test værdi for debug
bool CTRL_4 = false; // Test værdi for debug
bool Driver_1 = false; // Test værdi for debug
WORD Test_1 = 0x37A;  // Control register addresse
DWORD Test_2 = 0xFFFFFFFF;  // Værdi til control register
BYTE Test_3 = 0x01; // Hvor mange bytes der skal skrives

// Skulle være måden at læse DLL explicit
MYPROC Funktion;
MYPROC_1 Initialise;
MYPROC_2 Driver;





HINSTANCE GetDll;  // windows defineret type




GetDll = LoadLibrary ("WinIo.dll"); // DLL loades over i Handle
if (GetDll == NULL)
CTRL_1 = false ;

// Driver funktion hentes
Driver = (MYPROC_2)  GetProcAddress (GetDll,"InstallWinIoDriver");
if (Driver == NULL)
Get_test_1 = 1;

// Initialiserings funktion hentes
Initialise =(MYPROC_1)  GetProcAddress (GetDll,"InitializeWinIo");
if (Initialise == NULL)
Get_test_2 = 1;

// Skrive funktion hentes
Funktion=(MYPROC) GetProcAddress (GetDll,"SetPortVal");
if (Funktion == NULL)
Get_test_3 = 1;

// Control værdien ændre sig til 1 ved kørsel
CTRL_4 =  Driver("D:\Egne programmer\I2C_BUS\WinIo\WinIo\Release\WinIo.sys",Driver_1);

// Intet liv her
CTRL_1 = Initialise();

// Intet liv her
CTRL_2 = Funktion(Test_1,Test_2,Test_3);

//************************************************************
Håber der er nogen der kan hjælpe
Avatar billede bertelbrander Novice
30. november 2005 - 22:36 #1
Jeg har rettet lidt, markeret med "// BKB"
Nu kan programmet compileres og går ikke ned når det køres:

//*************** Header fil ************************

#include <windows.h> // BKB
// public:          // BKB

typedef bool (*MYPROC)(WORD,DWORD,BYTE);
typedef bool _stdcall (*MYPROC_1)();
typedef bool _stdcall (*MYPROC_2)(PSTR, bool);
typedef bool _stdcall (*MYPROC_3)(); // BKB

//**************** CPP Fil ****************************

int Get_test_1 = 0;  // Test værdi for debug
int Get_test_2 = 0;  // Test værdi for debug
int Get_test_3 = 0;  // Test værdi for debug

bool CTRL_1 = true;  // Test værdi for debug
bool CTRL_2 = true;  // Test værdi for debug
bool CTRL_3 = true;  // Test værdi for debug
bool CTRL_4 = false; // Test værdi for debug
bool Driver_1 = false; // Test værdi for debug
WORD Test_1 = 0x37A;  // Control register addresse
DWORD Test_2 = 0xFFFFFFFF;  // Værdi til control register
BYTE Test_3 = 0x01; // Hvor mange bytes der skal skrives

// Skulle være måden at læse DLL explicit
MYPROC Funktion;
MYPROC_1 Initialise;
MYPROC_2 Driver;





HINSTANCE GetDll;  // windows defineret type

int main() // BKB
{

  GetDll = LoadLibrary ("WinIo.dll"); // DLL loades over i Handle
  if (GetDll == NULL)
  CTRL_1 = false ;

  // Driver funktion hentes
  Driver = (MYPROC_2)  GetProcAddress (GetDll,"InstallWinIoDriver");
  if (Driver == NULL)
  Get_test_1 = 1;

  // Initialiserings funktion hentes
  Initialise =(MYPROC_1)  GetProcAddress (GetDll,"InitializeWinIo");
  if (Initialise == NULL)
  Get_test_2 = 1;

  // Skrive funktion hentes
  Funktion=(MYPROC) GetProcAddress (GetDll,"SetPortVal");
  if (Funktion == NULL)
  Get_test_3 = 1;

  // Control værdien ændre sig til 1 ved kørsel
  CTRL_4 =  Driver("D:\\Egne programmer\\I2C_BUS\\WinIo\\WinIo\\Release\\WinIo.sys",Driver_1); // BKB

  // Intet liv her
  CTRL_1 = Initialise();

  // Intet liv her
  CTRL_2 = Funktion(Test_1,Test_2,Test_3);
}
Avatar billede larsfrom Nybegynder
30. november 2005 - 23:45 #2
Jeg glemte, at sige at koden var skrevet inde under en knap
funktion i Cbuilder6. så det kørt egentligt.

Jeg fandt egentligt problemet da jeg fik læst det hele igenném igen.
jeg havde lagt de drivere der var med til programmet det forkerte sted, stod egentlig med fed skrift i en hjælpe fil der var med
da jeg først fik dem lagt rigtigt virkede alle de måder jeg havde
forsøgt på.
!!!!!!!! Skoven og træerne, en værre en !!!!!!!!!
Så hvis der er nogen der står og mangler en måde at arbejde med sin printerport på
kan jeg anbefale Winio.dll + drivere

Ellers tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester