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
' Jnesama 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 SubAihe on jo aika vanha, joten et voi enää vastata siihen.