今天用C++动态库导出一个类,导出头文件如下:

#pragma once
#ifdef DLLMSG_EXPORTS
#define DLLMSG_API __declspec(dllexport)
#else
#define DLLMSG_API __declspec(dllimport)
#endif
class DLLMSG_API CDealAppMsg
{
public:CDealAppMsg(void){};virtual ~CDealAppMsg(void){};void DispatchMsg(WORD v_iMsgType,DWORD wParam,DWORD lParam);void SndMsgData2App(int v_iMsgDirection,DWORD v_dwCmd,void *v_pDat,int v_dwLen);void SndMsgReg2App(int v_iMsgDirection,DWORD wParam,DWORD lParam);
private:void _DealRegMsg(DWORD wParam,DWORD lParam);void _DealCopyDataMsg(DWORD wParam,DWORD lParam);HWND _GetAppWnd(int v_iMsgDirection);
};

编译出现警告:inconsistent dll linkage

解决方法:

在  工程--属性--配置属性--c/c++--预处理器--预处理定义, 增加DLLMSG_API预定义,问题就可以解决了。(这个问题比较低级,作者是初用c++,所以才出现这种状况)

原因:
代码依赖于是否定义了DLLMSG_API来决定宏展开为__declspec(dllexport)还是__declspec(dllimport)
展开为__declspec(dllexport)是DLL编译时的需要,通知编译器该函数是需要导出供外部调用的。 
展开为__declspec(dllimport)是给调用者用的,通知编译器,该函数是个外部导入函数。
对于工程设置里面的预定义宏,是最早被编译器看到的。所以当编译器编译DLL工程时,因为看到前面有工程设置有定义DLLMSG_API,所以就把PREDLL_API展开为__declspec(dllexport)了。
这样做的目的是为了让DLL和调用者共用同一个h文件,在DLL项目中,定义MYDLL_EXPORTS,PREDLL_API就是导出;在调用该DLL的项目中,不定义MYDLL_EXPORTS,PREDLL_API就是导入。

解决警告inconsistent dll linkage相关推荐

  1. VS2013+openCV3.0无脑配置方法+解决警告问题【windows平台】

    VS2013+openCV3.0无脑配置方法+解决警告问题[windows平台] 参考文章: (1)VS2013+openCV3.0无脑配置方法+解决警告问题[windows平台] (2)https: ...

  2. 成功解决TabError: inconsistent use of tabs and spaces in indentation

    成功解决TabError: inconsistent use of tabs and spaces in indentation 目录 解决问题 解决思路 解决方法 解决问题 TabError: in ...

  3. vs2015中安装cplex攻略以及解决丢失cplex.dll问题

    vs2015中安装cplex攻略以及解决丢失cplex.dll问题 参考文章: (1)vs2015中安装cplex攻略以及解决丢失cplex.dll问题 (2)https://www.cnblogs. ...

  4. mysql.proc is wrong_解决警告:数据库错误Column count of mysql.proc is wrong.

    事实上,如果你使用 问题就因为你已升级MariaDB或 升级MariaDB或mysql_upgrade命令完成升级更新. 之后,操作MySQL数据库过程中,可能将显示错误消息. 警告: 数据库错误 C ...

  5. 解决警告You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler

    //解决警告You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler ...

  6. 解决opencv自定义dll 调用时找不到 opencv_world400d的pdb文件的问题

    解决opencv自定义dll 调用时找不到 opencv_world400d的pdb文件的问题 本文章将解决以下几个问题 其中报错包括 OpenCV(4.0.0) Error: Assertion f ...

  7. 如何解决“缺失kernelbase.dll”问题?kernelbase.dll的修复问题

    在使用Windows操作系统时,你可能会遇到"缺失kernelbase.dll"的错误提示.这意味着你的计算机缺少kernelbase.dll文件,这是Windows操作系统中重要 ...

  8. 如何解决电脑缺失dll文件

    有时候,我们的电脑会出现缺少某些dll文件导致一些功能不可用,今天我电脑也出现了这种问题,我在网上找了很多种方法都没有解决,想下载一个dll修复工具,结果他捆绑了很多垃圾软件,很是让人烦恼,最后无意中 ...

  9. IDEA解决警告波浪线的方法

    IDEA解决警告波浪线的方法 出现错误 发现可能是警告 解决办法 步骤:File-Setting-Editor-Color Scheme-General-Errors and Warnings 按照步 ...

最新文章

  1. Python-读写文件
  2. TLS回调函数(1)
  3. Android基础_数据存储
  4. 瑞银监控机器人组装法_瑞银公布Model 3后续拆解报告:装配问题严重 噪音勉强能接受...
  5. c#转换成vbnet 工具 (源代码)
  6. oracle exception 循环,Oracle Exception In Loop
  7. jQuery DataTables 插件使用笔记
  8. TL摄像头如何放到html去直播,使用flash插件来调用pc的摄像头如何将它嵌入到TML页面中...
  9. 房屋出租管理软件,打造一体化的管理模式
  10. goahead源码分析webs.c
  11. 详细记录基于vue+nodejs+mongodb构建的商城学习(三)基于项目的vue框架梳理
  12. 小米的服务器地址怎么修改,小米无线路由器IP地址怎么修改
  13. Conflux DAO 社区技术委员会成立 助力生态繁荣发展
  14. 乐乎常用的html源码,点点网关闭自定义html模板代码功能,网易lofter重新映入眼帘...
  15. ACTF2020 writeup
  16. 化工厂人员定位详细解决方案
  17. macbook历代_哪个是你的最爱? 历代经典Mac台式机回顾
  18. 展锐android r kernel 快速编译
  19. 基于抽象语法树的Online Judge语义查重系统设计与实现(毕设)
  20. 钉钉可以手机和电脑同时登陆吗

热门文章

  1. 如何基于OSS和MPS,快速搭建音视频文件上传服务?
  2. 【jQuery 区别】.click()和$(document).on(click,指定的元素,function(){});的区别
  3. c#如何读取相机手机的拍摄时间
  4. WIndows 下安装mysql (non-install版本,即绿色版,或称为 源码包)
  5. [读书笔记]C语言函数调用过程
  6. Asp.Net统一前后端提示信息方案
  7. 【php】php编译pcntl以支持多进程
  8. 《一条狗的回家路》曝中国风海报 霍思燕为狗狗配音
  9. 进程与线程 thread (二)——线程概念
  10. 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案