解决警告inconsistent dll linkage
今天用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相关推荐
- VS2013+openCV3.0无脑配置方法+解决警告问题【windows平台】
VS2013+openCV3.0无脑配置方法+解决警告问题[windows平台] 参考文章: (1)VS2013+openCV3.0无脑配置方法+解决警告问题[windows平台] (2)https: ...
- 成功解决TabError: inconsistent use of tabs and spaces in indentation
成功解决TabError: inconsistent use of tabs and spaces in indentation 目录 解决问题 解决思路 解决方法 解决问题 TabError: in ...
- vs2015中安装cplex攻略以及解决丢失cplex.dll问题
vs2015中安装cplex攻略以及解决丢失cplex.dll问题 参考文章: (1)vs2015中安装cplex攻略以及解决丢失cplex.dll问题 (2)https://www.cnblogs. ...
- mysql.proc is wrong_解决警告:数据库错误Column count of mysql.proc is wrong.
事实上,如果你使用 问题就因为你已升级MariaDB或 升级MariaDB或mysql_upgrade命令完成升级更新. 之后,操作MySQL数据库过程中,可能将显示错误消息. 警告: 数据库错误 C ...
- 解决警告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 ...
- 解决opencv自定义dll 调用时找不到 opencv_world400d的pdb文件的问题
解决opencv自定义dll 调用时找不到 opencv_world400d的pdb文件的问题 本文章将解决以下几个问题 其中报错包括 OpenCV(4.0.0) Error: Assertion f ...
- 如何解决“缺失kernelbase.dll”问题?kernelbase.dll的修复问题
在使用Windows操作系统时,你可能会遇到"缺失kernelbase.dll"的错误提示.这意味着你的计算机缺少kernelbase.dll文件,这是Windows操作系统中重要 ...
- 如何解决电脑缺失dll文件
有时候,我们的电脑会出现缺少某些dll文件导致一些功能不可用,今天我电脑也出现了这种问题,我在网上找了很多种方法都没有解决,想下载一个dll修复工具,结果他捆绑了很多垃圾软件,很是让人烦恼,最后无意中 ...
- IDEA解决警告波浪线的方法
IDEA解决警告波浪线的方法 出现错误 发现可能是警告 解决办法 步骤:File-Setting-Editor-Color Scheme-General-Errors and Warnings 按照步 ...
最新文章
- Python-读写文件
- TLS回调函数(1)
- Android基础_数据存储
- 瑞银监控机器人组装法_瑞银公布Model 3后续拆解报告:装配问题严重 噪音勉强能接受...
- c#转换成vbnet 工具 (源代码)
- oracle exception 循环,Oracle Exception In Loop
- jQuery DataTables 插件使用笔记
- TL摄像头如何放到html去直播,使用flash插件来调用pc的摄像头如何将它嵌入到TML页面中...
- 房屋出租管理软件,打造一体化的管理模式
- goahead源码分析webs.c
- 详细记录基于vue+nodejs+mongodb构建的商城学习(三)基于项目的vue框架梳理
- 小米的服务器地址怎么修改,小米无线路由器IP地址怎么修改
- Conflux DAO 社区技术委员会成立 助力生态繁荣发展
- 乐乎常用的html源码,点点网关闭自定义html模板代码功能,网易lofter重新映入眼帘...
- ACTF2020 writeup
- 化工厂人员定位详细解决方案
- macbook历代_哪个是你的最爱? 历代经典Mac台式机回顾
- 展锐android r kernel 快速编译
- 基于抽象语法树的Online Judge语义查重系统设计与实现(毕设)
- 钉钉可以手机和电脑同时登陆吗
热门文章
- 如何基于OSS和MPS,快速搭建音视频文件上传服务?
- 【jQuery 区别】.click()和$(document).on(click,指定的元素,function(){});的区别
- c#如何读取相机手机的拍摄时间
- WIndows 下安装mysql (non-install版本,即绿色版,或称为 源码包)
- [读书笔记]C语言函数调用过程
- Asp.Net统一前后端提示信息方案
- 【php】php编译pcntl以支持多进程
- 《一条狗的回家路》曝中国风海报 霍思燕为狗狗配音
- 进程与线程 thread (二)——线程概念
- 一次误报引发的DNS检测方案的思考:DNS隧道检测平民解决方案