[Only registered and activated users can see links. Click Here To Register...]Quote:
Nope.
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Damit kannst du Funktionen deklarieren und Aufrufen als wären sie in C++ geschrieben.
"FastCall This calling convention is not supported."
da fangen die probleme schon an.
da auch inline assembler nicht möglich ist, bekommt man bei funktionen die außerhalb der normal üblichen konventionen liegen, was durchaus schonmal durch compileroptimierung oder durch i-nen trick des programmierers (sieht man öfters mal in low level engine funktionen), praktisch nicht lösbare probleme.
EDIT:
da es wohl auch kein naked functions gibt(korrigier mich, wenn ich irre), fallen auch noch einige hookingmethoden und andere tricks raus.
ist einfach zu erkennen und lassen sich gegenmaßnahmen gegen ergreifen.Quote:
Sauber und unauffällig, daran ist nichts auszusetzen.
um diese gegenmaßnahmen auszuschalten muss man dann wieder unmanaged code anwenden, falls überhaupt so einfach möglich.
mir jetzt nicht so genau angeschaut, aber kann ich ein objekt wie dieses hier:Quote:
Doch, auch hier übernimmt der Marshal die ganze Arbeit.
Code:
class GameClass
{
public:
__declspec(align(16)) Vec4 a;
__declspec(align(16)) Vec3 b;
__declspec(align(16)) Vec4 c;
__declspec(align(16)) Vec3 d;
int SomeInt1;
bool SomeBool1;
bool SomeBool2;
bool SomeBool3;
char* SomeCString;
virtual void f0000();
virtual int& f0001();
};
z.b.:
Code:
GameClass* Blubb = (GameClass*) 0x123456; Blubb->f0000(); Blubb->a = Vec4(0, 1, 2, 3); int temp = Blubb->f0001(); Blubb->SomeBool3 = false;
oder muss ich erst zig tricks anwenden, damit vtable, bool alignment und vector alignment beachtet wird?
einfacher würde ich das nicht nennen, in c/c++ reicht ein typedef.Quote:
Jup, das geht sogar einfacher als in C++, weil das der Marshal für dich macht. Siehe oben.