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;
}
Était-ce utile?

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
scroll top