So guten Tag erst mal,
habe ein Problem in VARPG.
Und zwar will ich aus einer txt Datei, die auf meiner Festplatte liegt den Inhalt auslesen und dann in ein Mehrzeiliges Eingabefeld laden.
Dazu benutze ich APIs aus der kernel32.dll.
Das Problem ist nun, daß das "CreateFile" und das "CloseFile" funktioniert, nur das "ReadFile" funktioniert nicht.
Im Debugger sieht das folgerndermaßen aus:
Nach "CreateFile" - "BRC" = 272
Nach "GetLastError" - "Error" = 0
Nach "ReadFile" - "RET2" = 0 ---> wenns funzt müsste es 1 sein
Nach "GetLastError" - "Error" = 6 ---> heisst das der Handle falsch ist
und "OVERLAP" ist 259 ---> warum auch immer
Nach "CloseFile" - "RET3" = 1 ---> hat also funktioniert

Was ich jetzt nicht verstehe ist, das er den Handle beim "ReadFile" nicht annehmen will, direkt danach den gleichen Handle beim "CloseFile" aber akzeptiert.
Das gleiche Problem habe ich wenn ich einen Com-Port öffne, da funzt auch alles, sogar ein "WriteFile", nur das "ReadFile" nicht.

Das komische ist auch, das beides schon mal so funktioniert hat. Aber als ich dann mein Programm erweitert habe, mit Sachen die eigentlich nichts damit zu tun haben, hat es auf einmal nicht mehr funktioniert.
Kann es was geben, was dem ins Gehege kommt, obwohl es eigentlich nichts damit zu tun hat?!?

Hier noch Quellcode-Auszüge (wollte nicht allen reinpacken, da das Programm knappe 4000 Zeilen hat):

PHP-Code:
     D CRTFILE         PR     10U 0 ExtProc('CreateFileA'
     
D                                     DLL('Kernel32.dll'
     
D                                     Linkage(*StdCall)
     
D                                 VALUE OPTIONS(*STRING)
     
D                             10I 0 Value
     D                             10I 0 Value
     D $SEC                                LIKE
(secattr)
     
D                             10I 0 Value
     D                             10I 0 Value
     D                             10I 0 Value
 
     D GETLASTERROR PR     10U 0 EXTProc
('GetLastError')     
     
D                                     DLL('Kernel32.dll')     
     
D                                     Linkage(*StdCall)
 
     
D READFILE        PR     10U 0 ExtProc('ReadFile')     
     
D                                        DLL('Kernel32.dll'
     
D                                        Linkage(*StdCall)
     
D                             10I 0 Value
     D                                 
*    VALUE OPTIONS(*STRING)
     
D                             10I 0 Value
     D $WRITE                             LIKE
(WRITE)
     
D $OVER                             LIKE(OVERLAP)
 
     
D CLOSEFILE     PR     10U 0 ExtProc('CloseHandle')     
     
D                                        DLL('Kernel32.dll'
     
D                                        Linkage(*StdCall)
     
D                             10I 0 Value
 
     D secattr         DS
     D LENGTH                        10I 0 INZ
(80
     
D SECDESC                     10I 0 INZ(0)
     
D BOOL                         10I 0 INZ(0)
     
D name            S             10A
     D access         S             10U 0 INZ
(3221225472)
     
D share         S             10U 0 INZ(0)
     
D create         S             10I 0 INZ(3)
     
D attr            S             10U 0 INZ(128)
     
D template        S             10I 0 INZ(0)
     
DBRC             S             10U 0 
     DRET             S             10U 0 
     DRET2             S             10U 0     
     DRET3             S             10U 0    
     DRET4             S             10U 0
     DWRITE            S             10U 0     
     DOVERLAP         S             10U 0
     DENT1             S             10A 
     DENT2             S             18A 
     DENT3             S            350A 
     DENT4             S             18A
     DENT5             S         2000A
     DENTERR         S             80A         
     DaENT1            S             
inz(%addr(ENT1)) 
     
DaENT2            S             inz(%addr(ENT2)) 
     
DaENT3            S             inz(%addr(ENT3))     
     
DaENT4            S             inz(%addr(ENT4))
     
DaENT5            S             inz(%addr(ENT5))     
     
DaENTERR         S             inz(%addr(ENTERR
PHP-Code:
EVAL     ENT4 'c:\rdc\hilfe_1.txt' X'00'
     
C*
     
C                 EVAL     BRC CRTFILE(aENT4:ACCESS:share:
     
C                             secattr:create:attr:template)
     
C*
     
C                 EVAL     error getlasterror
     C
*
     
C                 EVAL     length 2000
     C                 
EVAL     RET2 READFILE(BRC:aENT5:Length:WRITE
     C                             
:OVERLAP)
     
C                 EVAL     error getlasterror
     C
*
     
C                 EVAL     RET3 Closefile(brc

Ich hoffe ihr könnt mir weiterhelfen, weil es das letzte ist, was der Vollendung des Programms im Wege steht.
Schon mal vielen Dank für eure Mühen und allen ein schönes WE!

Mfg KAMPI