|
解决方法是:
在 工程--属性--配置属性--c/c++--预处理器--预处理定义, 增加MYDLL_EXPORTS,预定义,问题就可以解决了。(这个问题比较低级,作者是初用c++,所以才出现这种状况)
原因:
PREDLL_API依赖于是否定义了MYDLL_EXPORTS来决定宏展开为__declspec(dllexport)还是__declspec(dllimport)
展开为__declspec(dllexport)是DLL编译时的需要,通知编译器该函数是需要导出供外部调用的。
展开为__declspec(dllimport)是给调用者用的,通知编译器,该函数是个外部导入函数。
对于工程设置里面的预定义宏,是最早被编译器看到的。所以当编译器编译DLL工程中的MYDLL.cpp时,因为看到前面有工程设置有定义MYDLL_EXPORTS,所以就把PREDLL_API展开为__declspec(dllexport)了。
这样做的目的是为了让DLL和调用者共用同一个h文件,在DLL项目中,定义MYDLL_EXPORTS,PREDLL_API就是导出;在调用该DLL的项目中,不定义MYDLL_EXPORTS,PREDLL_API就是导入。
GMT+8, 2024-5-4 05:12 , Processed in 0.047761 second(s), 15 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.