Newsgroup: it.comp.programmare.win32
Titolo: Aiuto ad un Principiante

Salve a tutti
Ho due domande da fare :
1) (Molto importante)  Ho una dll che uso di continuo con Visual Basic 6 e
ora ho la necessità
di utillizzarla con MS Visual C++ ma non so come includerla nel progetto.
2) Esiste una funzione in MS. Visual C++ che indipendentemente dal Pc che
uso posso avere un ritardo a richiesta dell'ordine del millisecondo?
    Mi riferisco a una cosa del tipo   Wait(1)  oppure Pause(1) per tardare
di 1 millisecondo....
    Potete darmi queste dritte ?
Grazie mille
Drake

 Drake
ciao

 di 1 millisecondo....
Sleep() del kernel. o come ultima risorsa timeGetTime()

 Drake
Per un sistema operativo non realtime come Windows un'attesa di 1 ms non e'
poi cosi' banale. Dovresti farcela con i kernel di classe NT, non ho mai
provato con quelli 9x. Io avevo avuto la necessita' di eseguire una funzione
ogni 2 ms, ma mi pare di aver provato anche a spingerla un po' di piu' fino
a 1 ms. Avevo provato con un'oscilloscopio (gestivo dei canali digitali) e
dopo una prima incertezza nei primi colpi procedeva precisa. Per la
creazione del timer avevo usato la timeSetEvent. Forse a te serve una cosa
leggermente diversa, sospendere l'esecuzione del tuo programma per 1 ms e
poi riprenderla, ma dipende da cosa devi fare.
Luca

Dietro vostri consigli ho finalmente prodotto qualcosa di funzionante o
quasi.
Il sorgente mi viene compilato correttamente ma durante l'esecuzione ( qua :
Output_32(uParam1, uParam2); ) mi viene una finestra di errore che dice :
----------------------------------------------------------------------------
---------------------------
"Debug Error!
Program : c:\prova\prova\Debug\prova.exe
Module:
File: i386\chkesp.c
Line:42
The valueof EPS was not properly saved across a function call. This is
usually a result of calling a function declared with one convention with a
function pointer declared with a with a different calling convention
(Press Retry to debug the application)"
----------------------------------------------------------------------------
-------------------------
Ignorando l'errore il programma comunque scrive sulla parallela.
La Dll che uso l'ho scaricata da internet e funziona perfettamente con
Visual Basic 6 utilizzando questo codice :
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress
As Integer, ByVal Value As Integer)
Private Sub Command2_Click()
Out Val("&H" + Text1.Text), Val(Text2.Text)
End Sub
Ma dov'è che sbaglio ?
Confido per un aiutino
Grazie mille Drake
typedef UINT (* LPFNDLL_INP)(UINT);
typedef void (* LPFNDLL_OUT)(UINT,UINT);
HINSTANCE hDLL;           // Handle to DLL
LPFNDLL_INP Input_32;
LPFNDLL_OUT Output_32;    // Function pointer
UINT  uParam1, uParam2, uReturnVal;
int init_LPT1_Dll() {
 hDLL = LoadLibrary("inpout32");
    if (hDLL != NULL)
 {
     Output_32 = (LPFNDLL_OUT )GetProcAddress(hDLL,"Out32");
  if (!Output_32)
  {
    FreeLibrary(hDLL);
    printf("ERRORE \n");
    return 1;
  }
   return 0;
 }
 return 1;
}
void free_LPT1_Dll() {
    FreeLibrary(hDLL);
}
int main(int argc, char* argv[])
{
    if(init_LPT1_Dll()) {
              printf("ERRORE \n");
                    return -1;
 }
     uParam1  = 0x378;
     uParam2  = 0x35;   // valore di prova
     Output_32(uParam1, uParam2);
     free_LPT1_Dll();
    return 0;
}