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的方法 显式(静态)调用、隐式(动态)调用的更多相关文章

  1. (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

    selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...

  2. 实例理解scala 隐式转换(隐式值,隐式方法,隐式类)

    作用 简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型.话不多说,直接测试 ImplicitHel ...

  3. 编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换)

    编写高质量代码的30条黄金守则-Day 01(首选隐式类型转换),本文由比特飞原创发布,转载务必在文章开头附带链接:https://www.byteflying.com/archives/6455 该 ...

  4. scala中隐式转换之隐式转换调用类中本不存在的方法

    /** * Created by root * Description : 隐式转换调用类中本不存在的方法 */ class Person(name : String){ def getPersonN ...

  5. linux下动态链接库(.so)的显式调用和隐式调用

    进入主题前,先看看两点预备知识. 一.显式调用和隐式调用的区别 我们知道,动态库相比静态库的区别是:静态库是编译时就加载到可执行文件中的,而动态库是在程序运行时完成加载的,所以使用动态库的程序的体积要 ...

  6. 简单了解 DLL中, .def 文件及C#调用C++方法

    DLL中导出函数的声明有两种方式: 1.在函数声明中加上__declspec(dllexport) //以下内容为 .h 文件中的内容 //向外界提供的端口 extern"C" _ ...

  7. VC2010 利用 def 文件生成 dll 文件的方法

    近期有个需求,要生成一个dll 文件.文件里的函数都是採用 stdcall 函数调用约定,可是不希望函数名被修饰(add 被修饰成 add@8). 这时就要用def 文件了. 比方我有以下两个函数: ...

  8. 如何用AU3调用自己用VC++写的dll函数

    这问题困扰我一个上午了,终于找到原因了,不敢藏私,和大家分享一下. 大家都知道,AU3下调用dll文件里的函数是很方便的,只要一个dllcall语句就可以了. 比如下面这个: $result = Dl ...

  9. BCB如何编写,调用动态链接库DLL

    一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分.想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个 ...

随机推荐

  1. C#学习笔记11

    1.List.BinarySearch():BinarySearch()采用的是二分搜索算法,要求元素已经排好序,其特点是假如元素没有找到,会返回一个负整数,该值的按位取反(~)结果是“大于被查找元素 ...

  2. springmvc 登陆拦截器 配合shiro框架使用

    public class LoginHandlerInterceptor extends HandlerInterceptorAdapter{ @Override public boolean pre ...

  3. 避免console错误,console兼容

    背景:写js代码时写了很多console.log进行日志打印,最后上生产时不想删除日志输出, 但是ie在不打开控制台时,日志输出会导致后续js不执行,所以需要适时屏蔽js日志输出 (IE等不支持con ...

  4. javascript实现数据结构: 树和二叉树的应用--最优二叉树(赫夫曼树),回溯法与树的遍历--求集合幂集及八皇后问题

    赫夫曼树及其应用 赫夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,有着广泛的应用. 最优二叉树(Huffman树) 1 基本概念 ① 结点路径:从树中一个结点到另一个结点的之间的分支 ...

  5. 我的书单mybooklist

    首先自我介绍一下,我是一名程序员. 计算机的世界太浩瀚,而我太过渺小. 比计算机的世界更为广大的是,书籍的海洋.学海无涯. 无论是计算机的世界,还是其他类书的世界,人一辈子要看的书看也看不完. 于是我 ...

  6. linux搭建nginx图片服务器

    1:参考http://blog.csdn.net/u012401711/article/details/53525908

  7. 【Leetcode】【Easy】String to Integer (atoi)

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  8. #单元测试#以karma+mocha+chai 为测试框架的Vue webpack项目(二)

    学习对vue组件进行单元测试,先参照官网编写组件和测试脚本. 1.简单的组件 组件无依赖,无props 对于无需导入任何依赖,也没有props的,直接编写测试案例即可. /src/testSrc/si ...

  9. apache-实战(二)

    Apache 虚拟主机 --用apache或nginx就可以做 一台服务器跑多台web服务 VPS virtual private server 虚拟专用服务器 --使用虚拟化技术来做 云服务器 虚拟 ...

  10. 多层感知机MLP的gluon版分类minist

    MLP_Gluon .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...