DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用
DLL 文件编写方法:
1、建立DLL工程
2、声明、定义要导出的函数
BOOL WINAPI InitDlg( HWND hTabctrl,TShareMem* pTshare,CRect* prc);//WINAPI 标准调用约定
void WINAPI EndDlg();
DWORD WINAPI ShowDlg(int nDlgNum);
实现部分省略,需要注意的是,在函数开头第一句需要加上:
AFX_MANAGE_STATE(AfxGetStaticModuleState());
3、新建.def文件
内容如下:
; TShare.def : Declares the module parameters for the DLL.
LIBRARY "TShare"
DESCRIPTION 'TShare Windows Dynamic Link Library'
EXPORTS
; Explicit exports can go here
InitDlg//导出的函数名,没有括号。。。
ShowDlg
EndDlg
4、调译工程。。。
一、显式(静态)调用与调试DLL:
调用部分:
主程序需要DLL工程的 .lib文件、.dll文件、dll的头文件
1、将DLL编译后的以上三个拷贝到主程序的工程目录下(DLL文件还需要复制到Debug目录下);
2、在需要调用DLL函数的源文件中包含dll的头文件;
3、在主程序工程设置:Project->Settings...->Object/Library Modules中输入.lib文件名
4、直接调用DLL导出的函数。
调试部分:
1、把DLL项目增加到主程序的工程中;
2、把主程序和DLL工程的输出文件设置在同一个目录(Project->Settings...->Link->Output file name里面的路径修改到同一个目录../Debug/...);
3、在主程序或者DLL程序设置断点、F5调试运行、F11进行函数内部。
二、隐式(动态)调用与调试DLL:
调用部分:
主程序需要DLL工程的 .dll文件和导出函数原形。。。
1、在需要调用DLL函数的源文件中typedefDLL函数指针
typedef BOOL (WINAPI* pFuncInit)(HWND hTabctrl,TShareMem* pTshare,CRect* prc);
typedef DWORD (WINAPI* pFucShow)(int nDlgNum);
typedef DWORD (WINAPI* pFucEnd)();
2、加载DLL:LoadLibrary(_T("DLL文件名"));
HMODULE m_hDll= LoadLibrary(_T("TShare.dll"));
if (m_hDll==NULL)
{
MessageBox(_T("获取DLL失败!"),_T("提示"),MB_ICONERROR);
return;
}
pFuncInit pInit;
pInit = (pFuncInit)GetProcAddress(m_hDll,_T("InitDlg"));
(*pInit)(m_CtrlTab.m_hWnd,&m_TSahre,&rc);
3、卸载DLL:FreeModule(m_hDll);
调试部分:
1、把DLL项目增加到主程序的工程中;
2、把主程序和DLL工程的输出文件设置在同一个目录(Project->Settings...->Link->Output file name里面的路径修改到同一个目录../Debug/...);
3、在主程序或者DLL程序设置断点、F5调试运行、F11进行函数内部。
注:在显式(静态)调用DLL有的在要调用DLL的源文件中加以下语句也可以
#pragma comment(lib,"TShare.lib")
extern "__stdcall"_declspec(dllimport) BOOL InitDlg(HWND hTabctrl,TShareMem* pTshare,CRect* prc);
DLL DEF文件编写方法 VC++ 调用、调试DLL的方法 显式(静态)调用、隐式(动态)调用的更多相关文章
- (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...
- 实例理解scala 隐式转换(隐式值,隐式方法,隐式类)
作用 简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型.话不多说,直接测试 ImplicitHel ...
- 编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换)
编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换),本文由比特飞原创发布,转载务必在文章开头附带链接:https://www.byteflying.com/archives/6455 该 ...
- scala中隐式转换之隐式转换调用类中本不存在的方法
/** * Created by root * Description : 隐式转换调用类中本不存在的方法 */ class Person(name : String){ def getPersonN ...
- linux下动态链接库(.so)的显式调用和隐式调用
进入主题前,先看看两点预备知识. 一.显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要 ...
- 简单了解 DLL中, .def 文件及C#调用C++方法
DLL中导出函数的声明有两种方式: 1.在函数声明中加上__declspec(dllexport) //以下内容为 .h 文件中的内容 //向外界提供的端口 extern"C" _ ...
- VC2010 利用 def 文件生成 dll 文件的方法
近期有个需求,要生成一个dll 文件.文件里的函数都是採用 stdcall 函数调用约定,可是不希望函数名被修饰(add 被修饰成 add@8). 这时就要用def 文件了. 比方我有以下两个函数: ...
- 如何用AU3调用自己用VC++写的dll函数
这问题困扰我一个上午了,终于找到原因了,不敢藏私,和大家分享一下. 大家都知道,AU3下调用dll文件里的函数是很方便的,只要一个dllcall语句就可以了. 比如下面这个: $result = Dl ...
- BCB如何编写,调用动态链接库DLL
一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...
随机推荐
- Redis的Publish/Subscribe
Publish/Subscribe 从字面上理解就是发布(Publish)与订阅(Subscribe),在Redis中,你可以设定对某一个key值进行消息发布及消息订阅,当一个key值上进行了消息发布 ...
- 一般处理程序、ASP.NET和MVC的区别
这个问题说起来,我有点惭愧 想当初在大学里学的就是ASP.NET WebForms 在实习期间也是用的WebForms来开发网站,然后就觉得.NET开发网站就是用这个开发模式 现在想想都想笑...实在 ...
- Tesorflow源代码安装方式以及错误的解决方法
作者 修雨轩陈@cnblog 目录 Configure the installation. (安装配置) Create the pip package and install (创建pip安装包并且安 ...
- 任务六:通过HTML及CSS模拟报纸排版
任务目的 深入掌握CSS中的字体.背景.颜色等属性的设置 进一步练习CSS布局 任务描述 参考 PDS设计稿(点击下载),实现页面开发,要求实现效果与 样例(点击查看) 基本一致 页面中的各字体大小, ...
- 多线程(五)~ wait/notify机制(等待/通知)
首先我们来看一张图,这张图描述了线程操作的几个步骤. 图已经描述的很清楚了,这里除了wait()之外,其他的前面都已经接触过了. 这一章我们主要来说一下和wait()相关的操作,其实和wait()相关 ...
- spring与mybatis的整合
整合的思路 SqlSessionFactory对象放到spring容器中作为单例存在. 传统dao的开发方式中,从spring容器中获得sqlsession对象. Mapper代理形式中,从sprin ...
- Visual Studio 快捷键汇总
常见方法: 强迫智能感知:Ctrl+J.智能感知是Visual Studio最大的亮点之一,选择Visual Studio恐怕不会没有这个原因. 撤销:Ctrl+Z.除非你是天才,那么这个快捷键也是 ...
- JS实现“双色球”
需求: 双色球玩法简单介绍: “双色球”彩票投注区分为红色球号码区和蓝色球号码区.每注投注号码由6个红色球号码和1个蓝色球号码组成.红色球号码从1--33中选择:蓝色球号码从1--16中选择.程序要求 ...
- 对 Canal (增量数据订阅与消费)的理解
概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...
- NodeJs安装less(npm方式)
上一次讲了如何在浏览器端解析less文件,这次是在cmd中使用npm中的less模块来解析 详解如下 首下我们去下载一个https://nodejs.org/en/, 一路next之后,因为文件不 ...