dll文件

C#Dll和自定义控件

那年仲夏 提交于 2020-03-01 15:12:12
1、Dll类库 一般是包含函数(方法),很少包含控件,因为如果你包含控件的话,在使用时,还不如使用自定义控件使用的方便 可参考的简单使用操作连接 https://blog.csdn.net/liuqinghui1990/article/details/76943922?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 1.概述 动态链接库(Dynamic Linked Library):将写好的函数存在库中,以供其他程序开发调用,调用方式为“动态的”。 Windows为应用程序提供了丰富的函数调用,这些函数调用都包含在动态链接库中。其中有3个最重要的DLL,Kernel32.dll,它包含用于管理内存、进程和线程的各个函数; User32.dll,它包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数;GDI32.dll,它包含用于画图和显示文本的各个函数。 静态库(Static Library):函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块 组合起来创建最终的可执行文件(.EXE文件)。 2.动态库与静态库的区别

eclipse中运行c++控制台没输出

泄露秘密 提交于 2020-03-01 14:37:00
编译没报错,运行没输出,debug没反应,把生成的exe文件复制出来直接运行,提示“计算机中丢失libgcc_s_dw2-1.dll”,这些都是因为libgcc和libstdc默认是动态link,没找到libgcc_s_dw2-1.dll文件导致的。 解决方法是: 1.添加libgcc_s_dw2-1.dll文件所在目录到环境变量里,它在MinGW\bin的安装目录下,所以添加这个环境变量即可,但是这种情况只是解决exe文件在本机运行,放到其它电脑上还是可能找不到这个文件。 2.第二种是添加-static-libgcc -static-libstdc++命令到Project->Properties->C/C++ Build->Settings->MinGW C++ Linker->Miscellaneous->Linker flags把link方式改为static即可 The program can't start because libgcc_s_dw2-1.dll is missing 来源: oschina 链接: https://my.oschina.net/u/140663/blog/362483

LINUX总结第13篇:LINUX下动态库及版本号控制

亡梦爱人 提交于 2020-02-29 16:32:54
前言 针对同一动态组件的不同版本链接和加载。 一、概念 DLL HELL字面意思是DLL"灾难",是由于com组件(动态库)升级引起的程序不能运行的情况。 原因 有三种可能的原因导致了DLL Hell的发生: 一是由使用旧版本的DLL替代原来一个新版本的DLL而引起的。这个原因最普遍,是Windows 9X用户通常遇到的DLL错误之一。 二是由新版DLL中的函数无意发生改变而引起。尽管在设计DLL时候应该向下兼容,然而要保证DLL完全向下兼容却是不能的。 三是由新版DLL的安装引入一个新的Bug。 二、linux下的解决方案——命名规范 Linux 上的Dll ,叫sharedlibrary。Linux 系统面临和Window一样的问题,如何控制动态库的多个版本问题。为解决这个问题,Linux 为解决这个问题,引入了一套命名机制,如果遵守这个机制来做,就可以避免这个问题。但是这只事一个约定,不是强制的。但是建议遵守这个约定,否则同样也会出现 Linux 版的Dll hell 问题。 Real Name 首先是共享库本身的文件名:共享库的命名必须如 libname.so.x.y.z最前面使用前缀”lib”,中间是库的名字和后缀”.so”,最后三个数字是版本号。x是主版本号(Major Version Number),y是次版本号(Minor Version Number)

lib 和 dll 的区别、生成以及使用详解

倾然丶 夕夏残阳落幕 提交于 2020-02-28 21:16:50
【目录】 lib dll介绍 生成动态库 调用动态库 生成静态库 调用静态库 首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。 静态库 : 在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的 可执行文件 中,这种库称为静态库,其特点是 可执行文件 中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库 中的指令都全部被直接包含在最终生成的 EXE 文件 中了。 在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件 动态库 :动态链接库 是一个包含可由多个 程序 同时使用的 代码 和数据的库,DLL不是 可执行文件 。 动态链接 提供了一种方法,使进程可以调用不属于其 可执行代码 的函数。函数的 可执行代码 位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分 开存储的函数。 在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件 那么上述静态库和动态库中的lib有什么区别呢? 静态库中的lib :该 LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中 动态库中的lib :该 LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供 总之

文档在线预览

我们两清 提交于 2020-02-28 17:18:53
2种思路 1.word文档转pdf,pdf转flash 2.word文档转html (1)jacob。(jacob 只支持windows服务器,不支持linux,.dll文件也是windows所特有的) 需要引入jacob.jar jar包,并且jar包还要调用jacob.dll文件,需要事先把jacob.dll文件放到以下3处地方:C:\Windows\System32 目录下,安装的jdk文件夹下的bin目录中,以及jre文件夹下的bin目录 (2)poi (3)openoffice openoffice 会在第一次打开包含他的页面的时候弹出小广告。linux服务器还要解决acess问题。 openoffice有个服务可以开启,再加上 jodconverter.jar 组合使用。 来源: https://www.cnblogs.com/sj427/p/4970903.html

从 dll 程序集中动态加载窗体 [原创]

荒凉一梦 提交于 2020-02-27 12:40:31
 昨天晚上花了一晚上时间写了一个从程序集中动态加载窗体的程序.将任何包含窗体的代码编译成 dll 文件,再把 dll 文件拷贝到本程序的目录下,本程序运行时即可动态检查到 dll 文件中的窗体,将窗体类的类型在程序菜单中显示出来,点击菜单即可运行对应的窗体.   本程序主要用到了 Assembly 类动态加载程序集,再得到程序集中包含类的 Type 类型,动态生成类实例,动态调用类方法.个人觉得这是一种提供高度松耦合,可随意扩展的程序结构框架,希望和大家探讨一下这种框架的应用前景!   关键性代码如下: using System; using System.Drawing; using System.IO; using System.Reflection; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace WindowsFormTest { /**/ /// <summary> /// Form1 的摘要说明。 /// </summary> public class FrmMain : System.Windows.Forms.Form { private int formNum; private

Dll注入技术之消息钩子

扶醉桌前 提交于 2020-02-27 04:00:23
DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个特性,我们可以将DLL注入到指定进程中。主要流程如下图所示 1.准备阶段 需要编写一个DLL,并且显式导出MyMessageProc()函数,主要代码如下: LRESULT WINAPI MyMessageProc( int code, WPARAM wParam, LPARAM lParam) { return CallNextHookEx(NULL, code, wParam, lParam); } 显示导出某个函数需要在.def文件中的EXPORTS填写MyMessageProc(),如下图所示: 2 .HOOK阶段 使用SetWindowsHookEx()之前首先需要将HOOK的DLL 加载到本身的进程中,以此得到DLL的模块句柄,再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,最后遍历出待注入进程的线程ID,这样SetWindowsHookEx()就可以利用这些参数进行HOOK了。主要代码如下图所示: //加载DLL到本身进程 hMod = LoadLibrary(pDllName); if (!hMod) return FALSE;

dll注入

假装没事ソ 提交于 2020-02-26 13:33:27
所谓DLL注入就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分。要实现DLL注入,首先需要打开目标进程。 例: hRemoteProcess = OpenProcess( PROCESS_CREATE_THREAD | //允许远程创建线程   PROCESS_VM_OPERATION | //允许远程VM操 [1] 作   PROCESS_VM_WRITE, //允许远程VM写   FALSE, dwRemoteProcessId )   由于我们后面需要写入远程进程的内存地址空间并建立远程线程,所以需要申请足够的权限(PROCESS_CREATE_THREAD、VM_OPERATION、VM_WRITE)。   如果进程打不开,以后的操作就别想了。进程打开后,就可以建立远线程了,不过别急,先想想这个远线程的线程函数是什么?我们的目的是注入一个DLL。而且我们知道用LoadLibrary可以加载一个DLL到本进程的地址空间。于是,自然会想到如果可以在目标进程中调用LoadLibrary,不就可以把DLL加载到目标进程的地址空间了吗?对!就是这样。远线程就在这儿用了一次,建立的远线程的线程函数就是LoadLibrary,而参数就是要注入的DLL的文件名。(这里需要自己想一想,注意到了吗,线程函数ThreadProc和LoadLibrary函数非常相似,返回值

DLL注入模板

烈酒焚心 提交于 2020-02-26 13:31:35
// Injector.cpp文件. // #include <windows.h> #include <tlhelp32.h> //----------------------------------------------------------------------------------------- // 在进程空间注入的DLL. BOOL WINAPI LoadLib(DWORD dwProcessId, LPTSTR lpszLibName) { BOOL bResult = FALSE; HANDLE hProcess = NULL; HANDLE hThread = NULL; PSTR pszLibFileRemote = NULL; __try { // 获得想要注入代码的进程的句柄. hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcessId ); if (hProcess == NULL) __leave; // 计算DLL路径名需要的字节数. int cch = 1 + strlen(lpszLibName); // 在远程线程中为路径名分配空间. pszLibFileRemote = (PSTR)VirtualAllocEx( hProcess, NULL, cch, MEM

Dll注入技术之远程线程注入

偶尔善良 提交于 2020-02-26 13:22:50
DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等。 远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLibrary()函数,进而将我们自己准备的DLL加载到远程进程空间中执行。 当然除了CreateRemoteThread()和LoadLibrary()这个两个主要的API还是远远不够的,我们还需要以下表格所示的API: OpenProcess 打开远程进程 VirtualAllocEx 在远程进程中申请空间 WriteProcessMemory 在远程进程中写入数据 WaitForSingleObject 等待信号量 VirtualFreeEx 释放远程进程中申请空间 CloseHandle 关闭句柄 主要代码如下: int CRemoteThreadInjectDLL::InjectDll( DWORD dwProcessId, PTCHAR szDllName) { if (szDllName[0] ==