gpt4 book ai didi

c++ - 在dll项目之间使用extern方法?

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:14 37 4
gpt4 key购买 nike

我有一个调试条件来管理我拥有的内存

    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

这存在于 Memory.h 中,并在 Memory.cpp 中实现。 Memory.h 定义为:

#ifdef MEMORY_EXPORT
#define DECL_MEMORY __declspec(dllexport)
#else
#define DECL_MEMORY __declspec(dllimport)
#endif
class DECL_MEMORY Memory : public Singleton<Memory>
{

现在,我有 SoundStuff.hSoundStuff.cpp,它们在一个单独的项目中,也以与上述类似的方式转换为 dll。 SoundStuff 所属的项目对Memory 所属的项目具有项目依赖性。在 SoundStuff.cpp 的实现中,调用了 Memory.h 中的 FUN_DELETE。它是通过单独项目中的函数调用的,但无论如何都会调用它。这会导致链接器错误。

error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,char const *,int)" (??3@YAXPAXPBDH@Z) referenced in function __unwindfunclet$?Init@SoundStuff@@AAEXXZ$1 SoundStuff.obj

为什么会这样,我该如何解决?

最佳答案

你必须明确地告诉编译器你想要导出哪些函数。要做到这一点需要一些歌舞,下面是我的做法:

#ifdef USING_DLL
#ifdef CORE_EXPORTS
#define CORE_EXPORT __declspec( dllexport )
#else
#define CORE_EXPORT __declspec( dllimport )
#endif
#else
#define CORE_EXPORT
#endif

我想导出的每个函数(或类)都被标记为 CORE_EXPORT。要为 DLL 构建,请定义 USING_DLL,并在您的 CoreFunctions 项目(但不是您的 DoSomeStuff 项目)中定义 CORE_EXPORTS。这将确保您的函数/类在构建 CoreFunctions DLL 时被声明为 __declspec(dllexport)(因此它们被导出),而在构建 DoSomeStuff 时被声明为__declspec(dllimport) (所以它们是进口的)。

关于c++ - 在dll项目之间使用extern方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1567282/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com