VS2005 DLL-关于warning : inconsistent dll linkage 的解决
2010-07-22 14:51
423 查看
解决 warning : inconsistent dll linkage
////////////////////MYDLL.h文件
//////////////////
#ifdef MYDLL_EXPORTS
#define PREDLL_API __declspec(dllexport)
#else
#define PREDLL_API __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
PREDLL_API void TestFun();
#ifdef __cplusplus
}
#endif
//////////////////
//MYDLL.cpp文件
//////////////////
#include "stdafx.h"
#include "MYDLL.h"
BOOL APIENTRY DllMain(
HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
PREDLL_API void TestFun()
{
//函数实现
}
--------------------------------------------------------------------------------------
解决方法是:
在 工程--属性--配置属性--c/c++--预处理器--预处理定义, 增加MYDLL_EXPORTS,预定义,问题就可以解决了。(这个问题比较低级,作者是初用c++,所以才出现这种状况)
英文版的为 Project -> Properties -> Configuration Properties -> c/c++ -> Preprocessor,在Preprocessor Definitions处添加 MYDLL_EXPORTS
--------------------------------------------------------------------------------------
原因:
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就是导入。
--------------------------------------------------------------------------------------
只要记住一点:
只要使用了如下的DLL导出导入:
#ifdef MYDLL_EXPORTS
#define PREDLL_API __declspec(dllexport)
#else
#define PREDLL_API __declspec(dllimport)
#endif
就需要在导出处添加MYDLL_EXPORTS预定义宏
相关文章推荐
- warning c4273: inconsistent dll linkage 的解决方法
- 解决 警告 inconsistent dll linkage
- warning c4273: inconsistent dll linkage 的解决方法
- 解决警告inconsistent dll linkage
- 关于VS2005编译wince Application 时缺少DLL问题的解决
- 关于 [Warning] SQ.SCH Extra Pin 1 in Normal of part 的解决办法
- warning c4273: inconsistent dll linkage
- 关于VC++6.0加载控件出现Unable to register this add-in because its DllRegisterServer returns an error 的解决方法
- 关于使用renderInContext函数后,出现low memory warning解决方法
- 关于启用php_curl.dll后PHP Warning: PHP Startup: in Unknown on line 0之烦恼~~
- 关于warning: mysql_result() expects parameter 1 to be resource,object given in……的解决方法
- Exception in thread "main" java.lang.LinkageError错误的解决
- 关于Eclipse启动时弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法
- opencv2.0移植完后使用中cxtypes.h出现warning: incompatible implicit declaration of built-in function 'lrint‘解决
- 关于Matlab找不到vs2008或vs2005编译器的解决办法
- VS2005中的一个小BUG:关于Dropdownlist无法Datadinding的解决方法。
- 关于The target "GetCopyToOutputDirectoryContentProjectItems" does not exist in the project.的解决方法
- 关于 eclipse failed to load the JNI shared library:"...\jvm.dll"解决
- git warning: LF will be replaced by CRLF in 解决办法
- 关于安装VS2005后‘找不到visual studio模板信息’的解决方法