assemblage et problème de liaison c
-
19-09-2019 - |
Question
Essayer de comprendre comment lier une fonction qui est définie dans une structure, la fonction est dans le code assembleur, et essaie de l'appeler de c. Je pense que je manque une cause pas quand je l'appelle la fonction, je reçois un symbole externe non résolu ...
;Assembly.asm
.686p
.mmx
.xmm
.model flat
include Definitions.inc
.code
?Initialize@Foo@@SIXPAUFee@@@Z proc
jmp $
?Initialize@Foo@@SIXPAUFee@@@Z endp
end
//CFile.c
struct Fee
{
signed long id;
}
struct Foo
{
static void Initialize(Fee *);
}
int startup(Fee * init)
{
Foo::Initialize(init); //<-- This is unresolved
return 0;
}
La solution
Votre code assembleur définit une fonction dont le nom décoré décode
public: static void __fastcall Foo::InitializeCurrentCpu(struct Fee *)
obtenus par l'utilitaire undname.exe. Foo :: InitializeCurrentCpu () ne sera pas un match pour Foo :: initialize (), le nom ne correspond pas. La Convention n'appelle.
Ecrire ce code en C ++ d'abord et regardez le fichier .map pour le nom décoré correct. Ou déclarer la fonction avec extern "C" pour supprimer la décoration C ++.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow