Thread View: thur.comp.software
2 messages
2 total messages
Started by Marc Mueller
Mon, 15 Apr 1996 13:14
C++-Windows-Problem
Author: Marc Mueller
Date: Mon, 15 Apr 1996 13:14
Date: Mon, 15 Apr 1996 13:14
58 lines
2774 bytes
2774 bytes
Hi,
ich versuche mich gerade an einer Konvertierung eines
DOS-Pascal-Programmes in ein Windows-C++-Programm und stosse dabei auf
fast unbehebbare Probleme. Zur Erklaerung : Es handelt sich um eine
Ansteuerung einer Messkarte, welche ueber Ports angesprochen wird, zur
Uebertragung nutzt diese den DMA und ein Hardware-Interrupt.
(Vielleicht gibt es ja eine WINDOWS-Hardware-FAQ, die meine Probleme
klaeren wurde)
1. Problem
============
Wie kann ich unter Windows ein Interrupt-Vektor setzen ?
In der c't war mal ein Artikel darueber, demnach solle man die Funktion
des DOS-API (Int 0x21, Funktion 25) nutzen, aber anstatt "int 0x21" soll
Mensch "Dos3Call" benutzen. Die Deklaration von Dos3Call sei aber in
der windows.h vergessen worden, also solle man selbes noch tun (extern). Habe
ich versucht, allerdings weigert sich der Linker, Dos3Call irgendwo zu finden
(Ich nutze MSVC 1.52). Im Moment rufe ich einfach int 0x21.
Die Maskierung des Hardware-Interrupts erledige ich einfach durch
Portzugriffe auf die Adresse 0x21, ist das Windows-tauglich ?
2. Problem
============
Das Programm ist soweit uebersetzt, nur habe ich irgendwo eine Windows
unvertraeglichkeit drin. Beim ersten Start laeuft das Programm, beim
zweiten gibt es irgendwelche Schutzverletzungen (komischerweise 0bh ODER
0dh; die Stelle im Programm, an der diese Auftritt ist auch nicht immer
die selbe ???).
Das DOS-Pascal-Programm (die Urversion) kann ich beliebig oft unter
Windows starten. Wenn ich diese allerdings starte, nachdem die
C++-Version (meine neue Version) einmal durchgelaufen ist,
meldet Windows, dass dieses Programm auf ein Geraet zugreifen will, das
schon von einer anderen Applikation verwendet wird. Welches Geraet meint
Windows : Den DMA-Controller, den PIC (Interrupt-Controller) oder die
Messkarte (merkt sich das Windows, welche Ports eine Software ansteuert) ?
Wie muss ich am Ende meines Programmes dieses ominoese Geraet wieder
freigeben ?
Fuer sachdienliche Hinweise bin ich schon jetzt aeusserst dankbar,
Marc Mueller
--
__ __ __ __
/ | / | / | / | Tel : 03641/446477
/ / |/ / | / / |/ / | Scall : 01681/1276513
s5/_/|__/ |_|u/_/|__/ |_|a @ RZ.Uni-Jena.De
Re: C++-Windows-Problem
Author: Jens Bookhagen
Date: Tue, 16 Apr 1996 16:01
Date: Tue, 16 Apr 1996 16:01
47 lines
2039 bytes
2039 bytes
s5muma@rz.uni-jena.de meinte am 15.04.96:
>
> 1. Problem
> ============
>
> Wie kann ich unter Windows ein Interrupt-Vektor setzen ?
> In der c't war mal ein Artikel darueber, demnach solle man die Funktion
> des DOS-API (Int 0x21, Funktion 25) nutzen, aber anstatt "int 0x21" soll
> Mensch "Dos3Call" benutzen. Die Deklaration von Dos3Call sei aber in
> der windows.h vergessen worden, also solle man selbes noch tun (extern).
> Habe ich versucht, allerdings weigert sich der Linker, Dos3Call irgendwo zu
> finden (Ich nutze MSVC 1.52). Im Moment rufe ich einfach int 0x21.
>
> Die Maskierung des Hardware-Interrupts erledige ich einfach durch
> Portzugriffe auf die Adresse 0x21, ist das Windows-tauglich ?
>
Sorry fuer die kurze Antwort, aber es sind einfach Zeitprobleme bei
mir. Zur Not ruf am Wochenende mal an.
Anbei ein Beispiel zur Bestimmung der Dosversion mittels DOS3Call:
VOID FAR PASCAL DOS3Call(VOID);
int nMajor;
int nMinor;
int nOEMNumber;
static char szUserMsg[80];
_asm
{
mov ax, 0x3000
call DOS3Call
mov nMajor, al
mov nMinor, ah
mov nOEMNumber, bh
}
wsprintf(szUserMsg,
"MS-DOS Version %d.%d OEM Nummer %d",
nMajor, nMinor, nOEMNumber);
MessageBox(hWnd, szUserMsg, "MS-DOS Version", MB_OK);
Jens
+---------------------------------------------------------+
| Jens Bookhagen, D-07749 Jena, Zillestr. 2 |
| Voice : +49-3641-450905, e-Mail: jb@obelix.jena.thur.de |
+---------------------------------------------------------+
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads