zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    [daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文
    [troubleshoot][daily][archlinux][pacman] pacman 与 pip 包文件冲突
    [daily] 宇宙终极shell之zsh
    [knowledge][basic][hardware] 内存的硬件结构(转)
    [troubleshoot][archlinux][X] GPU HANG
    [daily]使用rdtsc指令,测量程序的运行速度 [转]
    [have_fun] 好玩哒小游戏又来啦
    [dpdk] 读开发指南(2)(内容长期整理中)
    [Virtualization][SDN] 讲的很好的SDN软件定义网络视频课程
    [Virtualization][SDN] VXLAN到底是什么 [转]
  • 原文地址:https://www.cnblogs.com/bayzhang/p/5824724.html
Copyright © 2011-2022 走看看