Kun olen tekemässä ohjelmaa, jonka pitäisi jotenkuten toimia ilman alkuperäisen käyttiksen command.com ohjelmaa, mutta ilman sitä ei pysty ohjelmia ajamaan, joten olen yrittänyt löytää keinoja, mutta yhtäkään en ole saanut toimimaan.
Löysin netistä tälläisen koodin ja tein, kuten siinä käskettiin, mutta se ei toimi vaan valittaa DOS error koodi numeroa 2 vaikka tiedosto oikeasti jopa löytyy.
' you downloaded this file from www.maxcode.com ' > I don't really know how to use interrupts, but I could really use ' > that. Could you give me some commented code and an explanation of how ' > to do it? 'Load QB /LQB. This includes the routines needed for calling interrupts. 'Second, this will _*NOT*_ work in the IDE! You have to compile it... '$INCLUDE: 'QB.BI' DIM Regs AS RegType ' Whatever it is (Look in that BI DIM RegsX AS RegTypeX ' file) CLS ' INT 21,4B - EXEC/Load and Execute Program ' AH = 4B ' AL = 00 to load and execute program ' = 01 (Undocumented) create program segment prefix and load ' program, but don't execute. The CS:IP and SS:SP of the ' program is placed in parameter block. Used by debuggers ' = 03 load program only ' = 04 called by MSC spawn() when P_NOWAIT is specified ' DS:DX = pointer to an ASCIIZ filename ' ES:BX = pointer to a parameter block 'Okay. First, we have to load AX with the appropriate values. AX is the 'accumulator register, and is 16 bits wide. The two 8 bit portions are 'commonly referred to as AH and AL. (High and Low) Each can obviously 'hold one byte. AX=AH*256+AL CLS A$ = "C:\qbasic.exe" + CHR$(0) 'ASCIIZ = STRING$+&H00 'B$ = "My parameters!! WOW! Command.com will barf on these ones.. <G>" B$ = "" RegsX.AX = &H4B00 ' 4b - Select EXEC function from Int 21 ' 00 - Just load & run. Don't mess with the other ' stuff... Life is too short! RegsX.DS = VARSEG(A$) ' DS: Holds Segment of String RegsX.DX = SADD(A$) ' DX: Holds Offset of String ' For reference, 32-bit pointers to ram can be ' calculated using SEGMENT * 65536 + OFFSET ' However, since QB, unlike PB, doesn't support ' pointers in any form, this is only useful for ' passing to assembly routines or interrupts RegsX.ES = VARSEG(B$) ' Parameters in a string... Segment RegsX.BX = SADD(B$) ' Offset. You should be getting the drill <G> PRINT "Calling Int 21h EXEC on "; A$ CALL INTERRUPTX(&H21, RegsX, RegsX) ' on return: ' AX = error code if CF set (see DOS ERROR CODES) ProgramErrorCode = RegsX.AX PRINT "Program exited with "; ProgramErrorCode END
Se ei vaan toimi vaan valittaa error numeroa 2 eli file not found jos nyt satuin löytämään oikean selityksen sille numerolle... kenelläkään mitään ideoita?
Edit: voi olla myös, että en tajunnut kaikkea tuosta
Kenelläkään mitään ideaa mistä johtuu se, että ohjelma väittää ettei se muka löydä tiedostoa (DOS error number 2 "File not found") vaikka kaikki on ihan oikein kuitenkin... tjs ja saako kukaan ylipäätänsä tuota koodia toimimaan? Itse yritin quickbasic 7.1:llä
Aihe on jo aika vanha, joten et voi enää vastata siihen.