Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: mhribernik am 12. July 2006, 15:30
-
Hallo!
Ich hab mich gerade an einem Kernel in C++ versucht. Hab die Anweißungen im Tutorial genau befolgt, doch beim Kompilieren mit gcc kommt folgende Fehlermeldung:
C:\DJGPP\mystuff>gcc -c Video.cpp -ffreestanding -nostdlib -fno-builtin -fno-rtti -fno-exceptions
cc1plus.exe: warning: command line option "-ffreestanding" is valid for C/ObjC but not for C++
In file included from Video.cpp:1:
Video.h:26:7: warning: no newline at end of file
Video.cpp:71:2: warning: no newline at end of file
Video.cpp: In constructor 'CVideo::CVideo()':
Video.cpp:5: error: 'pVideoMem' was not declared in this scope
Video.cpp: In member function 'void CVideo::TextOut(char*, char)':
Video.cpp:46: error: 'pVideoMem' was not declared in this scope
Video.cpp: In member function 'void CVideo::ClearScreen()':
Video.cpp:58: error: 'pVideoMem' was not declared in this scope
Video.cpp:58: error: 'setmem' was not declared in this scope
Video.cpp: In member function 'void CVideo::ScrollDown(unsigned int)':
Video.cpp:67: error: 'pVideoMem' was not declared in this scope
Video.cpp:67: error: 'memcpy' was not declared in this scope
Video.cpp:68: error: 'setmem' was not declared in this scope
C:\DJGPP\mystuff>
Hab dann sogar den Code via Copy & Paste übernommen. Hat trotzdem nicht funktioniert.
Wo liegt der Fehler? Was mach ich Falsch?
Ich danke euch im Voraus für euer Bemühen!
mfg. Marko
PS. Den Quellcode findet ihr hier: http://www.jay-code.de/scripts/htmlgenerator.php?page=ckernel2&directory=tutorials
-
also pVideoMem ist einfach im header falsch geschrieben xD da muss das 'm' auch groß in der klassendeklaration.
das problem, dass memcpy und setmem fehlen, hatten wir schon einmal: einfach selba schreiben. den rest wirste ja wohl selber hinkriegen, sonst einfach nachfragen.
maumo
-
DANKE für deine Antwort.
Bezüglich memcpy und setmem: Wie kann ich die erstellen? Könntest du mir dabei helfen?
Ich danke im Voraus.
Mfg. Marko
-
Im SVN-Repository von LOST gibt es zufällig die beiden Funktionen:
void * memcpy(void * dest, const void * src, size_t num)
{
char *d = (char*)dest, *s = (char*)src;
while(num--)
{
*d++ = *s++;
}
return dest;
}
/// Addresse was wie oft?
void * memset(void * addr, int value, size_t len)
{
char *d = (char*)addr;
while(len--)
{
// Code ausführen
*d++ = value;
}
return addr;
}
memcpy ist von mir und memset von Damian und beide stehen unter der BSD-Lizenz. Wenn du also den Code verwenden willst, musst du dich an diese Lizenz halten. Oder du implementierst sie selbst neu, was eigentlich kein problem darstellen sollte. ;) Du solltest übrigens auch aufpassen, ob die Funktionen genau die selbe Aufrufkonventionen haben, wie die in deinem Code.
memcpy und memset halten sich an das hier dokumentierte Verhalten:
http://www.cplusplus.com/ref/cstring/memcpy.html
http://www.cplusplus.com/ref/cstring/memset.html
-
DANKE für deine Antwort.
Bezüglich memcpy und setmem: Wie kann ich die erstellen? Könntest du mir dabei helfen?
Ich danke im Voraus.
Mfg. Marko
Hat das jetzt gefunktioniert?????
-
Nein hat noch nicht ganz "gefunktioniert" :wink: nix für ungut.
Nein, mit den abänder des codes komm ich nicht ganz klar. Könntest du mir dabe helfen?
Danke im Voraus.
mfg. Marko
-
Du kannst mich ruhig im icq oder msn auf nehmen. Die tuts von Teejay sind ziemlich schwer. Ich habe es auch nie hinbekommen. Ich habe mal vom forum eine kleine testkernel runtergeladen. Dafür musst du aber mit linux sein.