C++ Projekt - ASM File hinzufügen
-
Guten Abend,
ich habe eine Klasse mit mehreren Funktionen; alles in einer DLL. Diese Funktionen sind in der Headerdatei deklariert und in einer ASM-Datei definiert:
MyClass.h
extern "C" { class _declspec(dllexport) MyClass { static void Im_ASM_File(int i);
MyClass.asm
.model flat, stdcall public Im_ASM_File .code Im_ASM_File PROC pp:DWORD mov eax, 123 ret 4h Im_ASM_File ENDP END
Testprogramm, welches auf die DLL zugreift:
#include MyClass.h int wmain(int argc, wchar_t* argv[]) { MyClass::Im_ASM_File(123); }
Naja, mir würde es ja gefallen, dem Compiler aber leider nicht:
Verweis auf nicht aufgelöstes externes Symbol ""public: static void __stdcall MyClass::Im_ASM_File(int)[...]
Jetzt weiß ich leider nicht mehr weiter...
-
Du musst die Funktion bei der Deklaration natürlich auch als stdcall deklarieren, das wäre unter MSVC __stdcall meines Wissens nach.
-
Ist alles per Compiler auf stdcall gestellt
-
Ich denke mal, es gibt Probleme damit, dass deine Funktion eine statische Memberfunktion ist. Probier mal, diese zu einer freien Funktion zu machen. Wenn es dann funktioniert, musst du sie wohl irgendwie im ASM als statische Memberfunktion kennzeichnen.
-
Hat leider auch nicht geholfen
-
Ich denke es liegt eher daran, dass die Funktion in der Klasse deklariert ist.
Aber ich kann sie ja im ASM File nicht als MyClass::Im_ASM_File definieren...
-
Ich frage mich gerade, was du vorhast. Eine C++ - Klassenfunktion rein in Assembler zu implementieren halte ich für unmöglich (lasse mich aber gern eines besseren belehren).
Würde nicht einfach inline-Asm reichen?void MyClass::Im_ASM_File(int i) { __asm { mov eax, 123 ... } }
Da gibt es zumindest bei MSVC keine Probleme, wenn du 32 Bit-Anwendungen kompilierst - bei 64 Bit wird auch dies nicht mehr unterstützt.
Daher die Frage, ist dies wirklich nötig?
-
Klar, hier wäre Inline natürlich besser, aber dies hab ich nur geschreiben, weil ich nicht meine ganze DLL posten wollte, also nur als Beispiel
Desweiteren will ich die DLL später auch noch x64 umsetzen, deshalb ist Inline nicht ausreichend...
-
Also um nochmal genau mein Anliegen zu erläutern (ist vielleicht etwas im Eifer des Gefechts verloren gegangen):
Ich habe eine DLL mit mehreren Klassen. Diese Klassen beinhalten Funktionen mit Assemblercode, welchen ich per Inline-ASM eingefügt habe. Soweit so gut, nun will ich aber die DLL bald auch für x64 umsetzen. Deshalb wollte ich schon jetzt die Definitionen der Funktionen in eine ASM-Datei verschieben, die Headerdatei kann ja ruhig so bleiben.
Hoffe es ist jetzt etwas klarer, was ich vorhabe...