je une condition de débogage pour gérer la mémoire où jeutilisation de méthodes externes entre projets dll?
extern void* operator new(unsigned int size, const char* file, int line);
extern void operator delete(void* address, const char* file, int line);
extern void Delete(void* address);
#define FUN_NEW new(__FILE__, __LINE__)
#define FUN_DELETE delete
Cela existe dans memory.h et est mis en œuvre dans Memory.cpp. Memory.h est défini comme:
#ifdef MEMORY_EXPORT
#define DECL_MEMORY __declspec(dllexport)
#else
#define DECL_MEMORY __declspec(dllimport)
#endif
class DECL_MEMORY Memory : public Singleton<Memory>
{
maintenant, je SoundStuff.h et SoundStuff.cpp, qui sont dans un projet séparé, converti également à une dll de manière similaire ci-dessus. Le projet auquel appartient SoundStuff
a une dépendance de projet par rapport au projet auquel appartient Memory
. Dans l'implémentation de SoundStuff.cpp, FUN_DELETE
, à partir de Memory.h, est appelée. Il est appelé via une fonction dans un projet distinct, mais il est appelé indépendamment. Cela conduit à des erreurs de linker.
erreur LNK2019: symbole externe non résolu "opérateur void __cdecl supprimer (void *, char const *, int)" (?? 3 @ YAXPAXPBDH @ Z) référencé dans fonction __unwindfunclet $ Init @ SoundStuff @@ AAEXXZ $ 1 SoundStuff.obj
Pourquoi est-ce et comment puis-je le réparer?
Veuillez montrer comment vous liez CoreFunctions à DoSomeStuff. –
Ajouté à la description Il y a une dépendance de projet là et la fonction Init d'une classe dans DoSomeStuff appelle FUN_DELETE, qui est définie dans CoreFunctions – Mark
Merci. Un autre bit vous dites: "Il est appelé à travers une fonction dans un projet séparé" - pouvez-vous préciser ce que cela signifie dans ce cas? Voulez-vous dire que 'SoundStuff.cpp' appelle une fonction dans un autre projet, qui à son tour appelle' FUN_NEW'? Si c'est le cas, est-ce que le code de cet autre projet fait aussi # #include "Memory.h" '? –