Heips!
tein ohjelman pätkän vb6:llä joka alustaa ohjelmointilaitteen windowssin käynnistyessä. kun ajan ohjelman "manuaalisesti" se toimii ja nollaa ohjelmointilaitteen, mutta kun lisään ohjelman tuonne käynnistä valikon käynnistä hakemistoon, mistä sen pitäisi lähteä käyntiin kun windows nousee jaloilleen, ja käynnistyykin ohjelma mutta heittää seuraavanlaisen herjan.
"the IO.SYS service is present, but the driver cannot be connected to".
oikos jollain tietoo mistä tämmönen johtuu ja ennen kaikkea kuinka se korjataan.
käyttiksenä xp
Morjens Arto!
Et viittis millään pistää koodia esille...jos vaikka joku osais avittaa...
juu tottakai. tää koko roska on yhdessä modulissa, eli ei oo näkyvää ikkunaa ollenkaan...
Private Declare Sub PortOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Byte) Private Declare Function PortIn Lib "IO.DLL" (ByVal Port As Integer) As Byte Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub main() SetProg 0, 0 PortOut 889, 0 PortOut 888, 0 End End Sub Public Sub SetProg(Memad As Integer, Conf As Byte) Dim Bit1 As Byte Dim Bit2 As Byte Bit1 = Memad And 255 Bit2 = Memad And 768 / 256 Conf = Conf * 4 Bit2 = Bit2 Or Conf PortOut 888, Bit1 PortOut 890, 13 Sleep 50 PortOut 890, 15 Sleep 50 PortOut 888, Bit2 PortOut 890, 7 Sleep 50 PortOut 890, 15 Sleep 50 End Sub Public Sub CEon() PortOut 890, 11 End Sub Public Sub CEoff() PortOut 890, 15 End Sub
Veikkaan että ongelmana on että ajuri ei ehdi latautua, alustua tms, ennenkuin käytät sitä tuossa ohjelmassa.
Laita looppi jossa on odottelet että ajuri latautuu.
Tyyliin
'Olemassa olevien declareiden lisäksi Private Declare Function IsDriverInstalled Lib "IO.DLL" As Boolean Sub Main() Dim i As Integer For i = 1 to 60 If IsDriverInstalled() Exit for Sleep 1000 Next If i = 61 Then MsgBox("Portin käyttö ei onnistunut minuutissa") End End If SetProg 0, 0 PortOut 889, 0 PortOut 888, 0 End End Sub ' Jne
sama ongelma jatkuu... ensin tulee tämä ilmoitus
""the IO.SYS service is present, but the driver cannot be connected to".
ja sitte noin minuutinn päästä tuo ohjelma tekemä msgbox.
No odottele kauemmin. Tai kokeile rebootata ja sitten heti kun vain voit niin aja se manuaalisesti.
Morjens Arto!
Lataa inpout32.dll ja testaa oheista viritelmää...
VB6-Projekti (StartUpTest)
'Module1 (Startup Object: Sub Main) 'Declare Function Inp Lib "inpout32.dll" Alias "Inp32" _ '(ByVal PortAddress As Integer) As Integer Declare Sub Out Lib "inpout32.dll" Alias "Out32" _ (ByVal PortAddress As Integer, ByVal Value As Integer) Sub Main() Static cnt As Integer Do: DoEvents If SetProg(0, 0)(0) = 0 Then Out 889, 0 Out 888, 0 Exit Do Else If cnt = 60 Then ResultDialog.Label1.Caption = _ "The device has not been initialised" _ & vbCrLf & vbCrLf & SetProg(0, 0)(1) ResultDialog.Show (1) End If cnt = cnt + 1 End If Sleep 1: Loop ResultDialog.Label1.Caption = _ "The device has been initialised" ResultDialog.Show (1) End Sub Function SetProg(Memad As Integer, Conf As Byte) As Variant Dim RetArray(1) As Variant Dim Bit1 As Byte Dim Bit2 As Byte Bit1 = Memad And 255 Bit2 = Memad And 768 / 256 Conf = Conf * 4 Bit2 = Bit2 Or Conf On Error GoTo ErrorHandler Out 888, Bit1 Out 890, 13 Sleep 0.1 Out 890, 15 Sleep 0.1 Out 888, Bit2 Out 890, 7 Sleep 0.1 Out 890, 15 Sleep 0.1 RetArray(0) = 0 RetArray(1) = "" SetProg = RetArray Erase RetArray Exit Function ErrorHandler: RetArray(0) = Err RetArray(1) = Error$ Err.Clear On Error GoTo 0 SetProg = RetArray Erase RetArray End Function Sub Sleep(delay As Single) delay = delay + Timer Do While delay > Timer: DoEvents: Loop End Sub
'ResultDialog (Form): 'Caption: "Device Initialization" 'BorderStyle: 3 - FixedDialog 'ClipControls: False 'ControlBox: False 'StartupPosition: 2 - CenterScreen 'Label1: 'AutoSize: True Option Explicit Private Sub Form_Activate() Sleep 3: End End Sub
Aihe on jo aika vanha, joten et voi enää vastata siihen.