Newsgroup: it.comp.lang.c++
Titolo: Aiuto : WinIO & C/C++

Salve a tutti
Ho un problema da risolvere e da solo non ci riesco.
Ho la necessità di  utilizzare la parallela sotto Winindows XP e per ora la
sola soluzione che ho trovato è quella di ricorrere
alla libreria WinIO. Devo dire che questa libreria WinIO funziona benissimo.
Unica pecca è che vorrei utilizzare una funzione del genere    Void
OutPort(Porta_Dati, Valore);   e per adesso non ci sono riuscito.
Per fare chiarezza allego il codice:
Ringrazio in anticipo
Saluti
Drake
----------------------------------------------------------------------------
-----------
#include <windows.h>
#include <stdio.h>
#include "winio.h"
//  #define Porta_Dati 0x9800;     //  <------   Questa soluzione non vuole
andare e vorrei che andasse
WORD Porta_Dati = 0x9800;    //  <------   Questa soluzione va alla grande
ma non mi piace
void main() {
  bool bResult ;
  bResult = InitializeWinIo();
  if (bResult)   {
                        OutPort(Porta_Dati, 100);         // <<------ 
Questa riga gestisce l'output sulla Porta_Dati
                        ShutdownWinIo();
                      }
  else              {
                         printf("Error during initialization of WinIO.\n");
                         exit(1);
  }
}
------------------------------- 
nIo.h        ----------------------------------------------------------
#ifndef WINIO_H
#define WINIO_H
#ifdef WINIO_DLL
#define WINIO_API _declspec(dllexport)
#else
#define WINIO_API _declspec(dllimport)
#endif
extern "C"
{
  WINIO_API bool _stdcall InitializeWinIo();
  WINIO_API void _stdcall ShutdownWinIo();
  WINIO_API PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize,
HANDLE *pPhysicalMemoryHandle);
  WINIO_API bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle,
PBYTE pbLinAddr);
  WINIO_API bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  WINIO_API bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  WINIO_API bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE
bSize);
  WINIO_API bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE
bSize);
  WINIO_API bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool
IsDemandLoaded = false);
  WINIO_API bool _stdcall RemoveWinIoDriver();
}
extern bool IsNT;
extern HANDLE hDriver;
extern bool IsWinIoInitialized;
bool _stdcall StartWinIoDriver();
bool _stdcall StopWinIoDriver();
void OutPort(WORD x , DWORD y ) {
                                                             SetPortVal( x ,
y, 4);
};
#endif
----------------------------------------------------------------------------
--------------------------------------------------------

 ma non mi piace
[cut]
#define Porta_Dati
(senza il punto e virgola)
Non funzionava perche', con la #define, la sostituzione e' letterale (nel 
codice), quindi stavi inserendo anche un punto e virgola, insieme al numero.
Comunque e' decisamente meglio la seconda dichiarazione o magari:
const WORD Porta_Dati = 0x9800;
o se vuoi il collegamento esterno:
static const WORD Porta_Dati = 0x9800;
La definizione di costanti tramite il precompilatore puo' portare a spiacevoli 
inconvenienti, come il tuo.
PS: Questo e' IT, perche' parliamo dello standard (a parte il tipo WORD, che 
non so come sia definito...)
Paolo
-- 
Anche se detesto quello che dici,
difendero' fino alla morte il tuo diritto a dirlo.
   - Voltaire
/\/ / /-/ / /_   Copyleft (L) 1984, All Rights Reversed

             ciao ho letto della tua email sulla gestione della parallela in xp!!!
personalmente ho trovato qualche difficolta' , hai detto che la llibreria
winIo funziona benissimo potresti darmi altre info o materiale!!
grazie
Enzo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/