把WinMain封装到dll里

例子如下:

1.dll项目文件testDll.cpp,代码:

#include "stdafx.h"
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow) 

 MessageBox(0, L"恭喜您,成功调用DLL中的WinMain入口点", L"提示",0); 
 return 0;
}

2.在dll项目中添加def模块定义文件testDll.def,代码:
EXPORTS
WinMain

编译生成testDll.lib和testDll.dll两个库文件

3.主项目Test.cpp,代码:
#include "stdafx.h"
#pragma comment(lib, "../Debug/testDll.lib")  引入之前生成的静态库

编译生成Test.exe

这样运行Test.exe就会弹出dll中的提示框了。

------------------------------
原理:
 Test.cpp没入口点WinMain函数,只是连接了testDll库,当Test运行时,加载testDll的导出函数WinMain,Test发现自己的代码里没有入口点函数WinMain,而在testDll里找到了WinMain,就调用了testDllDll的WinMain。

----------------------------------
把WinMain封装到Dll里需要注意的几个地方:

1.经过实验发现,dll中入口点函数一定要为WinMain方式,而不能为wWinMain,因为主程序Test项目发现自己没入口点函数后就只寻找

WinMain入口点,而不会根据它自己是否定义了UNICODE来寻找WinMain还是wWinMain入口点。当然,如果入口点函数放在主程序Test项目源文件里,它则会根据是否定义了UNICODE来选择WinMain和wWinMain。但现在的情况就是,如果入口点函数不放在主程序Test项目源文件里(比如放在testDll中),则主程序只找WinMain入口点,而不找wWinMain。为什么会这样,具体情况未知,微软留的黑手。

2.testDll中导出WinMain入口点函数只能用def模块定义文件testDll.def方式导出,而不能用extern "C" __declspec(dllexport) int

WINAPI……方式导出。这两种导出是有区别的,def方式可以导出任何函数,而extern "C" __declspec(dllexport)不能导出WinMain和

wWinMain函数(连接时会提示这两个函数重定义了,也许还有些其他内定的函数也不能导出),为什么会这样,具体情况未知,微软留的黑

手。

--------------------

mfc封装原理:

mfc封装windows程序框架和上面的原理是差不多的,WinMain也是封装在dll里,只不过在WinMain函数前先实例了个全局对象CWinApp theApp,这个CWinApp类封装了Windows程序的框架,比如CWinApp定义了成员方法:初始化、注册窗口、创建窗口、消息处理函数等。C++实例完全局对象theApp后,就进入WinMain入口点函数,WinMain在调用theApp的方法:初始化、注册窗口、创建窗口等。

这样你主程序只要引用mfc库,不写WinMain入口点函数,就可以正常运行,因为WinMain函数已经在mfc的dll里了。

把WinMain封装到dll里相关推荐

  1. 【转】将QT开发的界面程序封装成DLL,在VC中成功调用

    最近手头的一个项目需要做一个QT界面,并且封装成DLL,然后再动态调用DLL给出的接口函数,使封装在DLL内部的QT界面跑起来,在网上查了很多资料,今天终于成功了,经验不敢独享,因为CSDN给了我很多 ...

  2. Matlab函数封装为DLL供Cpp调用

    Matlab函数封装为DLL供Cpp调用 文章目录 Matlab函数封装为DLL供Cpp调用 Ⅰ目标 Ⅱ 学习 Ⅲ 实现 1. Matlab 函数封装为DLL 2. vs2015中C++调用Matla ...

  3. 将MFC Grid Control封装为DLL的做法及其在DLL中的使用方法

    将MFC Grid Control封装为DLL的做法及其在DLL中的使用方法 MFCGrid control是一款非常优秀的网格控件,支持非常丰富的界面元素,如下图: 因而在数据库程序及报表程序应用较 ...

  4. wasm转c调用与封装至dll案例

    wasm转c调用与封装至dll案例 准备工作 初级 猿人学练习题 中级 崔大网习题 高级 某视频网站 准备工作 相关文档: 1.某德地图矢量瓦片逆向(快速wasm逆向),执行wasm2c翻译出来的c代 ...

  5. VisionPro——在脚本中调用自己封装的DLL

    VisionPro--在脚本中调用自己封装的DLL 前言 一.具体配置与代码 前言 做硬件测试时,用到了vp的c#脚本,由于偷懒导出数据表想直接用以前封装好的函数库,在测试时遇到些问题,在此做些记录. ...

  6. 【C++】QT调用VS封装的dll(以科大讯飞离线命令词识别SDK为例)

    QT调用VS封装的dll(以科大讯飞离线命令词识别SDK为例) 1.说明: 跨平台调用dll出现各种坑,谨以此文避坑. 参考博文:https://www.cnblogs.com/seer/p/4789 ...

  7. 把你的unity 工程中的cs文件封装成 dll

    文章目录 1.打开Visual Studio 新建一个类库(.NET Framework) 项目 2.unity的dll引用:UnityEngine.dll 和 UnityEditor.dll 3.. ...

  8. spdlog 封装为 DLL

    项目中需要快速写入巨量日志,一开始用的是boost::log,但遇到崩溃问题,程序负载大了,滚动日志时偶尔会崩溃,总是报: boost::filesystem_error,bad_year, bad_ ...

  9. python怎么封装方法然后调用_我现在想把自己写的python模块源代码封装成dll,然后在别的python脚本里调用,可以吗?...

    展开全部 可以的,只要把python模块转换成2113dll模块,利用5261Python自带的ctypes模块加载调用就行.4102 ctypes 是Python的外部函数库.它提供了与1653 C ...

最新文章

  1. .data和.text段合并
  2. 定点数的编码表示方法
  3. micropython 蓝牙音箱_你愿意用ESPY-core做哪些有趣尝试?
  4. python api加快交易速度_使用Python3的pipedriveapi将交易输出限制为1000个交易
  5. 一览众山小的上一句是什么,怎么理解一览众山小的意思?
  6. Xcode升级后插件失效
  7. JQuery合并table单元格--有限制(table格式需要注意)
  8. kafka linux根目录满,Linux磁盘空间满的诡异问题解决方案
  9. 华三 h3c super vlan配置
  10. adadelta算法_机器学习中的优化算法(3)-AdaGrad, Adadelta(附Python示例)
  11. LaTex的图文安装--TexLife+SumtraPDF+Vscode
  12. 张学孟 (帮别人名字作诗)
  13. NLP - sentencepiece
  14. OpenCV开发笔记(六十四):红胖子8分钟带你深入了解SURF特征点(图文并茂+浅显易懂+程序源码)
  15. 10个学习Java的网站,肯定有你不知道的哦!
  16. Java基础重温_06:Debug模式(打断点、下一步),基础练习案例(减肥计划if,switch版本、逢七跳过、不死神兔、百钱白鸡、数组元素(求和,索引位置,反转)、判断数组是否相同、评委打分)
  17. [Apple Shapr3D]【续更】【shapr3D】认识Shapr3D,一个简单易用的设计类软件
  18. 重定向和请求转发的区别
  19. 【文献翻译CVPR2022】SoftGroup for 3D Instance Segmentation on Point Clouds
  20. android最新系统排行,安卓系统最新排名公布!论流畅MIUI也只能排第六

热门文章

  1. flash计算机基础实验,计算机应用基础实验报告(flash).pdf
  2. 计算统一社会信用代码的校验码(Lua)
  3. 吉林师范计算机考研真题,吉林师范大学考研真题汇总—方才学习网
  4. 计算机的软盘有没有磁性材料,磁性材料竟然还有如此惊人的历史!
  5. Unable to instantiate Action,,,,,,,,,defined for ',,,' in namespace '/,,,'null
  6. 测试绝地求生显卡使用率软件,玩绝地求生需要什么显卡才能流畅运行?10系列显卡吃鸡游戏测试对比...
  7. 《中国棒球》:国家女子棒球队·一棒成名
  8. galerkin有限元法matlab实现,有限元法求解二维Poisson方程的MATLAB实现
  9. ABB机器人外部轴参数(KpKvTi)调试
  10. 十分钟教你掌握CPU缓存