141
tyndur / Namens-Abstimmung zum CommOS
« am: 15. May 2005, 22:34 »
(L)LOST hat gewonnen? =D>
28. April 2024, 07:52
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
#include <iostream>
class foo
{
public:
foo() :
m_pfnBar(bar1)
{}
protected:
void bar1()
{
std::cout << "bar1" << std::endl;
}
void bar2()
{
std::cout << "bar2" << std::endl;
}
public:
void CallBar()
{
(this->*m_pfnBar)();
}
public:
void SetBar1()
{
m_pfnBar = foo::bar1;
}
void SetBar2()
{
m_pfnBar = foo::bar2;
}
protected:
void (foo::*m_pfnBar)();
};
typedef void (foo::*FOO_MEMBER_METHOD)();
int main()
{
foo meinFoo;
meinFoo.CallBar();
meinFoo.SetBar2();
meinFoo.CallBar();
meinFoo.SetBar1();
meinFoo.CallBar();
return 0;
}
void (*f)(p*);
class foo
{
public:
void bar()
{}
};
// definiere Typen pointer auf memberfunktion von foo, die void zurückgibt und keine Argumente übernimmt
typedef void (foo::*FOO_MEMBER_METHOD)();
int main()
{
FOO_MEMBER_METHOD pfnBar = foo::bar;
foo einFoo;
foo *pEinFoo = &einFoo;
(einFoo.*pfnBar)(); // direkter Aufruf
(pEinFoo->*pfnBar)(); // Aufruf über Zeiger
return 0;
}
ad Prozessverwaltung/Scheduling: d.h. ein ' externes ' modul ist dann fuer das eigentliche laden der prozesse verantwortlich?
wie soll denn das funktionieren den scheduler als eigenen prozess zu machen? der scheduler ist doch im grunde nur eine kombination aus interrupts, oder hab ich da was falsch verstanden?
ansonsten, sehr huebsch
lg, hannibal
mov eax, funktionsnummer
mov ecx, fensterpointer
mov ebx, höhe
mov edx, breite
int 0XYh
void foo(); // ?foo@@YAXXZ
extern "C" void foo(); // _foo
//ckernel.h
struct PROCESS
{
DWORD dwID;
//[...]
};
#ifdef __cplusplus
extern "C" {
#endif
void MacheEtwasMitPROCESS(const PROCESS* pProcess);
//[...]
#ifdef __cplusplus
};
#endif
//cppkernel.h
#include "kernel.h"
class CProcess : protected PROCESS
{
public:
DWORD GetId();
//[...]
public:
void MacheEtwas() const;
//[...]
};
//kernel.cpp
#include "ckernel.h"
#include "cppkernel.h"
void MacheEtwasMitPROCESS(const PROCESS* pProcess)
{
static_cast<const CProcess*>(pProcess)->MacheEtwas();
}
void CProcess::MacheEtwas() const
{
//[...]
}
// x86.h
class CTSSegment
{
public:
//[...]
protected:
DWORD m_wBackLink; // only low 16-bit are used
DWORD m_dwESP0;
};
// cppkernel.h
#include "x86.h"
class CThread : public CTSSegment
{
public:
void MacheEtwas();
//[...]
protected:
CProcess* m_pProcess;
//[...]
};
// ckernel.h
struct THREAD
{
DWORD dwBackLink; // only low 16-bit are used
DWORD dwESP0;
//[...]
PROCESS* pProcess;
};
// ich spar mir den #ifdef __cplusplus quatsch
extern "C" void MacheEtwasMitTHREAD(THREAD* pThread);
// kernel.cpp
void MacheEtwasMitTHREAD(THREAD* pThread)
{
reinterpret_cast<CThread*>(pThread)->MacheEtwas();
}
void CThread::MacheEtwas()
{
}