Quote:
Originally Posted by Nightblizard
Nope.
 
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.
Quote:
|
Sauber und unauffällig, daran ist nichts auszusetzen.
|
ist einfach zu erkennen und lassen sich gegenmaßnahmen gegen ergreifen.
um diese gegenmaßnahmen auszuschalten muss man dann wieder unmanaged code anwenden, falls überhaupt so einfach möglich.
Quote:
|
Doch, auch hier übernimmt der Marshal die ganze Arbeit.
|
mir jetzt nicht so genau angeschaut, aber kann ich ein objekt wie dieses hier:
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();
};
in c# so simpel wie hier (c++) deklarieren und benutzen?
z.b.:
Code:
GameClass* Blubb = (GameClass*) 0x123456;
Blubb->f0000();
Blubb->a = Vec4(0, 1, 2, 3);
int temp = Blubb->f0001();
Blubb->SomeBool3 = false;
oder objekte davon selber erstellen?
oder muss ich erst zig tricks anwenden, damit vtable, bool alignment und vector alignment beachtet wird?
Quote:
|
Jup, das geht sogar einfacher als in C++, weil das der Marshal für dich macht. Siehe oben.
|
einfacher würde ich das nicht nennen, in c/c++ reicht ein typedef.