精华内容
下载资源
问答
  • DLL什么意思

    千次阅读 2012-06-29 16:23:19
    DLL 是一个包含可由多个程序同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于促进...

      DLL 是一个包含可由多个程序同时使用的代码和数据的库。例如,在 Windows 操作系统中,Comdlg32 DLL 执行与对话框有关的常见函数。因此,每个程序都可以使用该 DLL 中包含的功能来实现“打开”对话框。这有助于促进代码重用和内存的有效使用。通过使用 DLL,程序可以实现模块化,由相对独立的组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到主程序中(如果安装了相应模块)。因为模块是彼此独立的,所以程序的加载速度更快,而且模块只在相应的功能被请求时才加载。此外,可以更为容易地将更新应用于各个模块,而不会影响该程序的其他部分。例如,您可能具有一个工资计算程序,而税率每年都会更改。当这些更改被隔离到 DLL 中以后,您无需重新生成或安装整个程序就可以应用更新。总之windows应用程序中的动态链接库文件。

    展开全文
  • 近期有空研究了一下DLL和HOOK的一些知识,故此做下笔记。下面以add,sub两函数和Point类为例来解释Dll与Hook的区别。 简单的说一个是勾子,一个是动态库注入,hook起到拦截的作用,dll的使用就很常见了。任何函数的运行...

    近期有空研究了一下DLL和HOOK的一些知识,故此做下笔记。下面以add,sub两函数和Point类为例来解释Dll与Hook的区别。

     简单的说一个是勾子,一个是动态库注入,hook起到拦截的作用,dll的使用就很常见了。任何函数的运行都需要动态或静态库。

    一,Dll的简单使用

          使用 一个DLL,一般需要另外两个文件.H和.LIB。.H文件或.LIB文件。.H文件可用于使用.DLL的客户或是.DLL文件本身,其作用编译时期。.LIB文件是一个引入苦,用于客户程序,作用在链接时期。.DLL文件当然作用于运行时期了。

        打开VS2008,选择Win32,DLL空项目。新建一个DLL.CPP和DLL.H文件。

    //DLL.H
    #ifdef DLL_API
    #else
    #define DLL_API  _declspec(dllimport)
    #endif
    
    DLL1_API int add(int a,int b);
    DLL1_API int subtract(int a,int b);
    
    class DLL1_API Point
    {
    public:
        void output(int x,int y);
    };
    
    //DLL.CPP
    #define DLL_API  _declspec(dllexport)
    #include "Dll.h"
    #include <stdio.h>
    
    int  add(int a,int b)
    {
    	return a+b;
    }
    
    int  subtract(int a,int b)
    {
    	return a-b;
    }
    
    void Point::output(int x,int y)
    {
    	printf("x = %d,y = %d",x,y);
    }
    
    //Dll应用端
    #include <iostream>
    #include "Dll.h"
    using namespace std;
    //加载动态链接库
    #pragma comment(lib,"Dll.lib")
    
    int main()
    {
    	cout<<add(2,3);
    	Point p;
    	p.output(2,3);
    }
    

       在C++中对函数名字的解析和C语言中方式不一样,因为C++支持重载的缘故,为了不同的语言都可以使用同一个DLL,我可以这样:

    在.H文件里更改为:#define DLL_API extern "C" _declspec(dllimport)

    在.CPP文件里更正为:#define DLL_API extern "C" _declspec(dllexport)

    注意:C一定要大写,这样导出函数名是以C命名的方式。


        在不同的不同的语言中,函数的调用规则是不一样的,在C语言中式C调用规则,在Dephi中是PASCAL(标准调用)调用规则中,为了不同的语言可以使用同一个DLL,我们需要更改函数的调用规则,例如:

    .H文件中:DLL1_API int _stdcall add(int a,int b);

    .CPP文件中实现add实现时也应加入_stdcall。

    但这样会更改导出的函数名,这又与extern "C"向冲突。

     

    解决上述文件的方式是是用.DEF文件,在vs2008中,可以新建一个,格式如下:

    LIBRARY “Dll”

    EXPORTS
    add
    subtract

    使用动态DLL,有两种方式,隐式调用和显示调用。

    #pragma comment(lib,"Dll.lib")
    这是隐式的,程序启动时,把所有的函数都映射进去,但有时我们只需要一个,不必要这么多,这是使用显示调用。

    使用显示调用,要使用以下两个函数:

    1.HMODULE WINAPI LoadLibrary(LPCTSTR lpFileName);
    2.FARPROC WINAPI GetProcAddress(HMODULE hModule, LPCSTR lpProcName);
     

    二,Hook的简单使用

    先看一个函数:

    HHOOK SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod, DWORD dwThreadId);

    参数意义:

    • idHook参数可以取如下常量:
    • WH_CALLWNDPROC     //窗口钩子,当系统向目标窗口发送消息时将触发此钩子
    • WH_CALLWNDPROCRET     //窗口钩子,当窗口处理完消息后将触发此钩子
    • WH_CBT   //当Windows激活、产生、释放(关闭)、最小化、最大化或改变窗口时都将触发此事件
    • WH_DEBUG    //调试钩子
    • WH_GETMESSAGE    //当往消息队列中增加一个消息时将触发此钩子
    • WH_JOURNALPLAYBACK     //回放钩子,可以用于播放已记录的鼠标和键盘的操作
    • WH_JOURNALRECORD     //记录钩子,可以用于记录鼠标和键盘的操作,木马程序可以使用此钩子窃取受控方在屏幕中敲入的密码
    • WH_KEYBOARD     //当敲击键盘时将触发此钩子
    • WH_MOUSE    //当有鼠标操作时将触发此钩子
    • WH_MSGFILTER   //消息过滤钩子
    • WH_SHELL   //Shell钩子
    • WH_SYSMSGFILTER    //系统消息过滤钩子

    lpfn参数:是一钩子过程,不同的钩子有不同的钩子过程。如果是全局钩子,该函数在DLL中,如果不是在当前进程中。
    hMod参数:指向DLL的句柄,如果dwThreadId是当前进程的一个线程ID并且钩子处理函数在当前进程中,hMod一定要为NULL。
    dwThreadId参数:如果是全局钩子该参数就为0,如果不是就是当前进程的一个线程ID

     

    2.卸载一个HOOL

    BOOL UnhookWindowsHookEx(HHOOK hhk);

    例子1:非全局钩子

    // InnerHookDlg.cpp
    HHOOK g_hMouse;
    HWND g_hWnd=NULL;
    
    LRESULT CALLBACK MouseProc(
      int nCode,      // hook code
      WPARAM wParam,  // message identifier
      LPARAM lParam   // mouse coordinates
    )
    {
    	return 1;
    }
    
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    	//if(VK_SPACE==wParam || VK_RETURN==wParam)
             //Alt+F4
    	/*if(VK_F4==wParam && (1==(lParam>>29 & 1)))
    		return 1;
    	else
    		return CallNextHookEx(g_hKeyboard,code,wParam,lParam);*/
            
            //按F2退出程序
    	if(VK_F2==wParam)
    	{
    		::SendMessage(g_hWnd,WM_CLOSE,0,0);
    		UnhookWindowsHookEx(g_hKeyboard);
    		UnhookWindowsHookEx(g_hMouse);
    	}
    	return 1;
    }
    
    
    BOOL CInnerHookDlg::OnInitDialog()
    {
    	//...............
    	g_hWnd=m_hWnd;
    	g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,NULL,GetCurrentThreadId());
    	g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,NULL,GetCurrentThreadId());
    	return TRUE;
    }

    例子2:全局钩子

    //Hook.CPP
    
    #include <windows.h>
    
    HHOOK g_hMouse=NULL;
    HHOOK g_hKeyboard=NULL;
    
    //共享g_hWnd
    #pragma data_seg("MySec")
    HWND g_hWnd=NULL;
    #pragma data_seg()
    
    
    LRESULT CALLBACK MouseProc(
      int nCode,      // hook code
      WPARAM wParam,  // message identifier
      LPARAM lParam   // mouse coordinates
    )
    {
    	return 1;
    }
    
    LRESULT CALLBACK KeyboardProc(
      int code,       // hook code
      WPARAM wParam,  // virtual-key code
      LPARAM lParam   // keystroke-message information
    )
    {
    	if(VK_F2==wParam)
    	{
    		SendMessage(g_hWnd,WM_CLOSE,0,0);
    		UnhookWindowsHookEx(g_hMouse);
    		UnhookWindowsHookEx(g_hKeyboard);
    	}
    	return 1;
    }
    
    void SetHook(HWND hwnd)
    {
    	g_hWnd=hwnd;
    	g_hMouse=SetWindowsHookEx(WH_MOUSE,MouseProc,GetModuleHandle("Hook"),0);
    	g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("Hook"),0);
    }
    
    //.DEF
    LIBRARY Hook
    EXPORTS
    SetHook		@2
    SEGMENTS
    MySec	READ WRITE SHARED

    在.DEF文件中

    SetHook  @2

    意思是制定SetHook在DLL中的位置

    SEGMENTS

    MySec   READ WRITE SHARED

    意思共享在.DLL中的MySec。

     

    本文部分参考资料来自网络整理。仅供学习参考。

    展开全文
  • 如果DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET用户使用的,那么会产生一个小麻烦。因为VC++对于__...

    如果DLL是提供给VC++用户使用的,你只需要把编译DLL时产生的.lib提供给用户,它可以很轻松地调用你的DLL。但是如果你的DLL是供其他程序如VB、delphi,以及.NET用户使用的,那么会产生一个小麻烦。因为VC++对于__declspec(dllexport)声明的函数会对函数名尾附加函数在DLL中的地址。

    __declspec(dllexport)  __declspec(dllimport)一般使用宏的形式:

    #ifdef ONEDLL_EXPORTS
    #define ONEDLL_API __declspec(dllexport)
    #else
    #define ONEDLL_API __declspec(dllimport)
    #endif

    这样在DLL代码本身就是__declspec(dllexport) ,在使用DLL的程序中就变成了__declspec(dllimport),这两个标志分别用来指明当前的函数将被导出还是是被导入的。

    如果调用模块和被调用模块都是C++(而且是同一种编程环境,如VC),那么就不需要extern “C”了

    因为这个标志的作用就是用在函数和变量声明前,无论是调用模块,还是被调用模块,都将生成C的修饰符。调用模块需要C修饰符的函数,而被调用模块则生成C修饰符的函数,

    所以这个标志在两者都是C++的时候使用并不受影响。但是如果C模块要调用C++ 模块,那么C++模块就需要使用extern “C”

    参考:

    https://www.cnblogs.com/zhehan54/p/5919983.html

    https://blog.csdn.net/u013399150/article/details/72123977?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

     

    展开全文
  • 我是不是在本地项目的bin文件夹里面的(CmsShop.Base.Controllers.dll)复制,然后粘 贴到服务器的项目bin里的(CmsShop.Base.Controllers)直接把它覆盖就可以了。 ![图片说明]...
  • 如何理解呢??????????????
  • 如题,今天突然发现 在vc modules列表里 有个dll 被标了红色感叹...这什么意思? 是这个DLL模块不正确?有中断?还是其他什么问题? [img=https://img-bbs.csdn.net/upload/201403/05/1394006921_88686.jpg][/img]
  • <p>Traceback (most recent call last):  File "C:\Users\10523\AppData\Local\Programs\Python\Python37-32\lib\site-packages\numpy\core\__init__.py&#...ImportError: DLL load failed: 拒绝访问。</p>
  • 3dmax作为一款三维动画制作软件,本身软件就比较...那么这个是为什么呢?3dmax代码193怎么解决呢? 3dmax加载插件dll出错,代码193 下载一个dll修复工具修复一下就行了,也可以从别的电脑拷贝一个dll文件到你的电脑 ...

    3dmax作为一款三维动画制作软件,本身软件就比较复杂,那么有的人安装之后在使用时会出现加载插件dll出错,代码193.那么这个是为什么呢?3dmax代码193怎么解决呢?
    3dmax加载插件dll出错代码193
    3dmax加载插件dll出错,代码193

    下载一个dll修复工具修复一下就行了,也可以从别的电脑拷贝一个dll文件到你的电脑

    展开全文
  • 我的任务是进行二维码扫描二次开发 以下是硬件调用文档的信息 void GetDecodeString(char *aa) 参数:char *aa,获取解码信息的指针 函数功能:获取解码信息 返回值:无 ...char *aa 是什么意思呢?
  • Syntax: IMPLIB [options] libname[.lib] [@respfile | srcname] [srcname ...] ...如果导出函数用__stdcall调用方式,implib要用什么参数? 如何从导出的函数名比如 _addfun@4 之类判断导出函数是用哪种调用方式?
  • 这叫引入kernel32.dll这个动态连接库。 这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入。举个例子: [DllImport("kernel32.dll")] private static extern void 函数名(参数,...
  • 这叫引入kernel32.dll这个动态连接库。 这个动态连接库里面包含了很多WindowsAPI函数,如果你想使用这面的函数,就需要这么引入。举个例子: [DllImport("kernel32.dll")] private static extern void 函数名...
  • dll

    2017-10-19 09:22:08
    写代码时提示错误:不能定义声明dllimport的函数,在网上查阅相关资料,导出dll的项目和使用dll的项目,dllexport的意思是到处动态链接库,dllimport的意思是从dll导入接口函数,那么就要注意我们的目的是什么
  • 该怎么修改,请各位老师指教。。。。。。。。。。。。。。。。。。
  • devenum - devenum.dll - DLL文件信息 DLL 文件: devenum 或者 devenum.dll DLL 名称: Device enumeration 描述: devenum.dll是DirectShow相关模块,用于声音输入、声音输出和MIDI设备。 属于...
  • 1.对于Dll文件,字面上的意思是动态链接库。可是,动态链接库,又是什么呢? 回答这个问题前,先需要说明下,Dll只是动态链接库的其中一种,不是说动态链接库只有DLl。 2.动态链接库是什么?动态链接库,就是将很多...
  • 请问,在生成Dll 时,这个“许可证”的提示是什么意思?应该如何解决?谢谢! [img=https://img-bbs.csdn.net/upload/201502/09/1423460734_839919.jpg][/img] 请问,是否要下载个“许可证”?哪里有下载的啊...
  • Dll

    2016-08-24 11:46:06
    PS:首先得明白extern的意思什么? extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。记住,下列语句:  extern int...
  • GAC是Global Assembly Cache的缩写,位于:[system root]\windows\assembly这个目录下,部署到GAC的意思就是把Dll文件kopy到这个目录中。注意,只有经过强命名的Dll文件才可以被复制进来。 转载于:...
  • SDK,DLL什么?

    千次阅读 2006-04-16 02:53:00
    SDK --- Software Development Kit, 软件开发工具包,一般提供文档,参考,类库,...他是 Software Development Kit 的缩写,中文的意思就是“软件开发工具包”。 SDK 是个覆盖面相当广泛的名词,可以这么说:辅助
  • MFC 应用程序是创建一个MFC应用程序的意思,最后生成的文件...MFC dll是创建一个MFC dll工程的意思,最后生成的文件应该是dll文件。 MFC dll文件可以被其他的工程调用。 转载至http://blog.csdn.net/u012116229/a...
  • 什么是SDK,API, DLL

    千次阅读 2018-07-14 16:00:48
    SDK:SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。这是一个覆盖面相当广泛的名词,可以这么说:辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。具体到我们这个...
  • 进程是什么意思?

    千次阅读 2013-01-17 14:22:20
    在应用程序被运行后,就相当于将应用程序装进容器里了,你可以往容器里加其他东西(如:应用程序在运行时所需的变量数据、需要引用的DLL文件等),当应用程序被运行两次时,容器里的东西并不会被倒掉,系统会找一个新的...
  • .dll

    2019-06-29 20:40:57
    .dll是共享文件什么意思呢 就是多个用户(进程)可以共享同一份文件(宏观并行)微观串行那种,他用的共享技术其实就是符号链接技术 。它是就是你假如编一段程序,他不需要加载所有代码,不需要把所有代码都调入...
  • 文章目录初期结论:意义:优点:缺点:...对于DLL文件,字面意思是动态链接库。但是动态链接库呢? 在回答这个问题之前,注意到dll只是一种动态链接库,而不仅仅是dll,这一点很重要。 什么是动态链接库?动态链接库是许多
  • 我百度的时候有人说是要检查exe和dll是否混用的不同版本的crt,我完全不知道这是什么意思......去百度crt的时候也感觉对这玩意的概念还是模模糊糊的,不知道有没有大神能帮忙解释一下,谢谢了。
  • DLL 木马揭秘

    2019-09-27 13:12:40
    一、从DLL技术说起 要了解DLL木马, 就必须知道这个“DLL”是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里。在那时候,写程序是一件繁琐的事情,因为每个程序的代码都 是独立的,有时候...
  • internal关键字是什么意思

    千次阅读 2017-03-05 14:32:16
    我来补充一下,对于一些大型的项目,通常由很多个DLL文件组成,引用了这些DLL,就能访问DLL里面的类和类里面的方法。 比如,你写了一个记录日志的DLL,任何项目只要引用此DLL就能实现记录日志的功能,这个DLL文件的...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 360
精华内容 144
关键字:

dll什么意思