MFC封装功能成动态库相关问题汇总记录
MFC封装功能动态库所遇问题汇总
- 从库的创建到调用过程
- 无法定义 dllimport 实体 Password
- 调用动态库显示动态库窗体得到句柄为空且无法显示窗体
- 头停止点不能位于宏或 #if 块中
- fcs140ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义/找到一个或多个多重定义的符号
从库的创建到调用过程
基本的创建过程可以从很多地方查询得到,这里主要记录在VS2017 Debug X86开发过程中发生的各种异常问题解决。
无法定义 dllimport 实体 Password
使用AFX_EXT_CLASS定义声明类
参考此博客内容点击跳转
注意在项目属性->C/C+±>预处理器中,预处理器定义_AFXEXT;删除_USRDLL。
调用动态库显示动态库窗体得到句柄为空且无法显示窗体
这里涉及到_USRDLL和_AFXDLL的用法不同 参考此博客点击跳转
其中
_USRDLL:静态方式链接MFC库,这样子的话本身MFC的库中带有_DllMain函数的定义
_AFXDLL:动态方式链接到MFC库,这样子的话,调用侧dll需要自己定义_DllMain入口函数
可知需要定义_DllMain入口函数,在此我创建dllmain.cpp文件来定义_DllMain入口函数
头停止点不能位于宏或 #if 块中
使用#ifdef和#endif包含整个.CPP内容时提示#endif多余
#ifdef _AFXEXT
#include "pch.h"
...............其他内容
#endif
解决方法:
1) 在解决方案资源管理器中,右击相应的.cpp文件,点击“属性”
2) 在左侧配置属性中,点开“C/C++”,单击“预编译头”
3) 更改右侧第一行的“创建/使用预编译头”,把选项从“使用预编译头(/Yu)”直接置空
fcs140ud.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 dllmain.obj 中定义/找到一个或多个多重定义的符号
解决方法:
1.是否已经删除预处理器定义中 _USRDLL
2.是否使用了 AFX_MANAGE_STATE(AfxGetStaticModuleState()) 参考此博客点击跳转
3.是否代码不是唯一运行 需要进行处理
#ifdef _AFXEXT #endif
MFC封装功能成动态库相关问题汇总记录相关推荐
- 属性浏览器控件QtTreePropertyBrowser编译成动态库(设计师插件)
文章目录 一.回顾 二.动态库编译 1.命令行编译动态库和测试程序 2.vs工具编译动态库和测试程序 3.安装文档 4.测试文档 三.设计师插件编译 1.重写QDesignerCustomWidget ...
- bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知 ...
- 黑科技:把第三方 iOS 应用转成动态库
推荐序 本文作者杨君,他之前投稿过一篇安全方面的文章:iOS 符号表恢复 & 逆向支付宝,这次他在国庆期间又发来一篇大作.本文介绍的黑科技非常牛逼,可以将别人的 iOS 应用转成动态库. 看完 ...
- suricata 编译成动态库使用
项目中需求使用suricata 检测功能,只需要获取检测得到的 alert 结果, 需要将suricata的检测功能集成到我们的项目中,并提供接口动态加载规则. 源代码版本 6.0.4 源码 将sur ...
- Android导入第三方静态库.a编译成动态库.so
http://ikinglai.blog.51cto.com/6220785/1324985 在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己 ...
- android.bp编译生成so,Android导入第三方静态库.a编译成动态库.so
在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库.如果有源码的话,可以直接跟你自己的代码一去编译成动态库so,但是如果没有源码的话,你就必须在自己的动态库so里面将别人生成好的 ...
- C# PtrToStructure 封装C/C++动态库出现的问题
目录 1 C文件函数参数有结构体 并且含有指针 2 结构体指针传递参数 3 PtrToStructure报错 结构不得为值类的问题 C# 封装C/C++动态库,主要遇到三个问题: 1 怎样把参数里面的 ...
- 将自己写的经常复用的类封装成动态库的方法
C++的开发不像c#那么给力,基本上引用下就可以了,它的步骤比较繁琐. 第一步:制作动态库 利用VC新建工程时选择win32 dynamic-Link Library(空的工程),然后添加头文件和cp ...
- 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )
文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...
最新文章
- XPath crash course note
- 某阿里8年资深程序员求助:连续两次绩效挂掉,被hr辞退不给n+1,怎么办?
- DataSet 去除重复的行
- Java虚拟机学习(6):对象访问
- django时差8个小时问题
- 栈和队列的区别,栈和堆的区别
- Hades:移动端静态分析框架
- PAT L1-027 出租
- 怎么看b树是几阶_数据库原理基础:设计B树与B+树的目的以及二者的优劣
- (转)基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作...
- 号称36个月不卡顿!网友:就是有点贵
- AI攻城狮,你需要那个数据集的种子么?
- python numpy安装步骤-NumPy 安装
- dos系统功能调用的屏幕显示字符是( )号调用_linux混杂设备驱动模型分析(字符设备驱动模型使用篇)...
- 企业如何利用OA系统轻松管理员工请休假
- php环境安装Java_常用PHP运行环境一键安装包推荐
- 1.6 SSH免密登录
- 别错过这张AI商用清单:你的生产难题可能被一个应用解决!
- 国标MPEG-PS实时流播放器开发(附例子)
- Qt QSS QSlider样式