Wenn ich eine Funktion in einer .c wieKann jemand manuell Namen in Visual C++ magen?
habenvoid foo(int c, char v);
... in meinem OBJ, wird dies ein Symbol namens
_foo
... gemäß C Name Mangeln Regeln. Wenn ich eine ähnliche Funktion in einer CPP-Datei habe, wird dies etwas ganz anderes, wie bei den compilerspezifischen Regeln für die Namensänderung. msvc 12 wird uns dies:
[email protected]@[email protected]
Wenn ich diese Funktion foo in der CPP-Datei und ich möchte es C Namen Mangeln Regeln verwenden (vorausgesetzt, ich ohne Überlastung tun kann), können wir es erklären, wie
extern "C" void foo(int c, char v);
... in diesem Fall sind wir gute alte
zurück_foo
... in der OBJ-Symboltabelle.
Meine Frage ist, ist es möglich, in die andere Richtung zu gehen? Wenn ich C++ - Namensverfälschung mit einer C-Funktion simulieren wollte, wäre dies mit gcc einfach, da die gcc-Namensveränderungsregeln nur kennzeichnungsfreundliche Zeichen verwenden, daher wird der zerlegte Name von foo _ZN3fooEic und wir könnten leicht
schreibenvoid ZN3fooEic(int c, char v);
Zurück in Microsoft-Compiler-Land, ich kann natürlich nicht mit einer Funktion, dessen Namen eine vollständig ungültig Kennung
void [email protected]@[email protected](int c, char v);
... aber ich würde immer noch wie diese Funktion mit zeigen, genannt erstellen dieser Symbolname in der OBJ-Symboltabelle.
Irgendwelche Ideen? Ich habe die unterstützten Pragmas von Visual C++ durchgesehen und sehe nichts Nützliches.
@mustafagonul Ich bin nicht zu demangle versuchen - ich mangle bin versucht. –
Auch wenn Sie dies tun könnten, müssten Sie irgendwie die ABI übereinstimmen. Du bellst hier den falschen Baum an. Verwenden Sie dafür extern "C" und akzeptieren Sie die Einschränkungen. – xaxxon
@mustafagonul Du verstehst das nicht ganz. Ich weiß, was der verstümmelte und nicht gemanagte Name ist. Ich möchte C++ - Namensmangel in einer C-Datei vortäuschen. –