dll文件

VC调用DLL

混江龙づ霸主 提交于 2019-11-28 03:09:01
调用DLL有两种方法:静态调用和动态调用. (一).静态调用其步骤如下: 1.把你的youApp.DLL拷到你目标工程(需调用youApp.DLL的工程)的Debug目录下; 2.把你的youApp.lib拷到你目标工程(需调用youApp.DLL的工程)目录下; 3.把你的youApp.h(包含输出函数的定义)拷到你目标工程(需调用youApp.DLL的工程)目 录下; 4.打开你的目标工程选中工程,选择Visual C++的Project主菜单的Settings菜单; 5.执行第4步后,VC将会弹出一个对话框,在对话框的多页显示控件中选择Link页。然 后在Object/library modules输入框中输入:youApp.lib 6.选择你的目标工程Head Files加入:youApp.h文件; 7.最后在你目标工程(*.cpp,需要调用DLL中的函数)中包含你的:#include "youApp.h" 注:youApp是你DLL的工程名。 2.动态调用其程序如下: 动态调用时只需做静态调用步骤1. { HINSTANCE hDllInst = LoadLibrary("youApp.DLL"); if(hDllInst) { typedef DWORD (WINAPI *MYFUNC)(DWORD,DWORD); MYFUNC youFuntionNameAlias

Windows 进程间通信

淺唱寂寞╮ 提交于 2019-11-28 02:32:36
3.4 使用 WM_COPYDATA 消息通信 对于少量数据可以用WM_COPYDATA方便地实现通信。由于SendMessage()是阻塞的,只有接收方响应了消息,SendMessage()才能返回,否则一直阻塞。所以,对于大量数据来说,用SendMessage()就容易造成窗口假死。 3.4.1 通过 WM_COPYDATA 消息实现进程间通信的方法 在Win32中,WM_COPYDATA消息主要目的是允许在进程间传递只读数据。SDK文档推荐用户使用SendMessage()函数,接收方在数据复制完成前不返回,这样发送方就不可能删除和修改数据。这个函数的原型如下: SendMessage(WM_COPYDATA,wParam,lParam) 其中wParam设置为包含数据的窗口句柄,lParam指向一个COPYDATASTRUCT的结构,其定义为: typedef struct tagCOPYDATASTRUCT{ DWORD dwData; DWORD cbData; PVOID lpData; }COPYDATASTRUCT; 其中dwData为自定义数据, cbData为数据大小, lpData为指向数据的指针。需要注意的是,WM_COPYDATA消息保证发送的数据从原进程复制到目标进程。但是,WM_COPYDATA消息不能发送HDC、HBITMAP之类的东西

深入Delphi下的DLL编程

夙愿已清 提交于 2019-11-28 00:24:32
深入Delphi下的DLL编程 作者:岑心 引 言 相信有些计算机知识的朋友都应该听说过“DLL”。尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的“悲惨”经历——无论再怎样小心,没有驱动损坏,没有病毒侵扰,仍然在使用(安装)了一段时间软件后,发现windows系统越来越庞大,操作越来越慢,还不时的出现曾经能使用的软件无法使用的情况,导致最终不得不重装系统。这种情况常常是由于dll文件的大量安装和冲突造成的。这一方面说明DLL的不足,另一方面也说明DLL的重要地位,以至我们无法杜绝它的使用。 DLL(动态链接库,Dynamic Link Library)简单来说是一种可通过调用执行的已编译的代码模块。DLL是windows系统的早期产物。当时的主要目的是为了减少应用程序对内存的使用。只有当某个函数或过程需要被使用时,才从硬盘调用它进入内存,一旦没有程序再调用该DLL了,才将其从内存中清除。光说整个windows系统,就包括了成百上千个dll文件,有些dll文件的功能是比较专业(比如网络、数据库驱动)甚至可以不安装的。假如这些功能全部要包括在一个应用程序(Application program)里,windows将是一个数百M大小的exe文件。这个简单的例子很容易解释DLL的作用,而调用DLL带来的性能损失则变得可被忽略不计。 多个应用程序调用同一个DLL

date\\\"123456 错误排查

妖精的绣舞 提交于 2019-11-27 23:13:41
最近服务器重装,干脆将所有的源代码都重新整理了一下,开始一切正常,后来发现,每次修改一个画面的时候就会报错 跟踪了下发现是datetime、SmartDate等时间类型的数据,在进行序列化的时候改变了形式:date\"123456。然后再json转换的时候,就会针对时间类型的数据报转换错误,开始以为是数据有问题,后来发现所有的画面都是这个问题! 大概猜到应该是源代码维护整理的时候,可能调用某个dll版本错了,导致了这个问题,自然而然的就是想到应该是 Newtonsoft.Json.dll这个文件的版本问题,可是,简单了对比了一下版本,发现没有什么问题!细心啊,细心!!!! 后来我使用另外一台电脑,运行之前的程序,发现没有这个问题,就将现在的代码全部重新运行了,还是有问题! 后来,我将web项目引用的其他项目的dll,都换成的老的dll,发现程序报错了,仔细了看了看,提及了 Newtonsoft.Json.dll,我想应该还是这个dll的问题,于是仔细对了过去,发现,果然是web项目引用的其他类库里面的 Newtonsoft.Json.dll不一致!!! 这个问题其实很好解决,也很好排查,可是因为我的粗心,导致我整整找了将近4个钟头!!! 这里记录一下,一是提醒其他对项目进行整理、升级的童鞋,如果发现整体、所有画面的错误,基本都是dll版本问题 ,二是随时警示自己,遇到问题一定要仔细

写壳1

本小妞迷上赌 提交于 2019-11-27 20:35:59
写壳的步骤 编写加壳器,加载被加壳程序和壳dll程序 将 dll 程序中 .text 拷贝到被加壳程序 将被加壳程序的 eip 指向stub 代码 需要让 stub 提供一个入口点 1. 加载 PE 文件5. 加载 Stub 文件 8. 加载共享数据,写入了原始OE篇2. 添加了一个区段4. 实现了一个 stub 提供了 start 7. 提供了一个共享数据结构 9. 重新跳转到 oep3. 将区段的内容进行了拷贝6. 重新设置了 oep10. 因为没有进行壳代码重定位,所以跳转失败 11. 对壳代码进行了重定位12. 加密代码段,保存了 key rva size13. 壳代码根据提供的内容进行解密 14. 解密时分页没有访问属性 15. 提供了获取函数的功能,添加了一个 VirtualProtect 函数 16. 设置属性,修复了加密的后的代码,最终跳转oep 首先,加载要加壳的PE文件 // 加载一个 PE 文件void CMyPack::LoadFile(LPCSTR FileName){ // 打开一个文件,理论上应该对文件进行判断,是否是一个 PE 文件,位数是多少 HANDLE FileHandle = CreateFileA(FileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN

LoadLibrary加载动态库失败

孤者浪人 提交于 2019-11-27 18:10:50
LoadLibrary加载动态库失败的可能原因以及解决方案: (1)dll动态库文件路径不对。此场景细分为以下几种情况: 1.1 文件路径的确错误 。比如:本来欲加载的是A文件夹下的动态库a.dll,但是经过仔细排查原因,发现a.dll动态库竟然被拷贝到B文件夹下去了。 若真遇到这种低级错误,建议你找个没人的墙角蹲下用小拇指逆时针划圈圈去吧。。。 1.2 实参传值错误。比如:实参类型为LPCWTR,经常都会因为字符串转换导致实参事与愿违。 网上的经验总结实例。某程序员经过一番周折后通过以下语句调用成功 hDll = LoadLibrary(TEXT("user32.dll")); 再经过一番百度google后发现,原来是字符格式惹的祸。 这里的LoadLibrary实际使用了LoadLibraryW而非LoadLibraryA,因此需要UNICODE字符串(宽字符串),而非窄字符串。 如下: #ifdef UNICODE #define LoadLibrary LoadLibraryW #else #define LoadLibrary LoadLibraryA #endif // !UNICODE 在C/C++代码中,直接使用""定义的字符串为窄字节串,而windows头文件中提供的TEXT宏可以根据是否定义了UNICODE宏来自动选择字符串类型。 因此,利用

C#解析JSON数据(反序列化对象)

萝らか妹 提交于 2019-11-27 16:41:50
C#解析JSON数据(反序列化对象) C#处理JSON数据的时候需要引用Newtonsoft.Json.DLL文件,这个DLL文件可以从其官方网站 https://www.newtonsoft.com/json 下载到本地,然后引入到项目里面,在需要处理的文件里引用即可。 using Newtonsoft.Json; json对象 { "Status": true, "Message": "成功", "data": "[ { "id":"1", "username":"邓紫棋", "number":"20162382000", "title":"GEM is beautiful", "describe":"很好看呀", "timestamp":"1564829049" } ]" } ashx接收json对象 HttpRequest request = context.Request; Stream stream = request.InputStream; StreamReader streamReader = new StreamReader(stream); string getJson = streamReader.ReadToEnd();//接收json对象 Analysis json = JsonConvert.DeserializeObject<Analysis>

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

末鹿安然 提交于 2019-11-27 15:57:21
原文章地址: https://www.cnblogs.com/TenosDoIt/p/3203137.html#c 首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。 静态库 :在 链接 步骤中, 连接器将从库文件取得所需的代码,复制到生成的可执行文件(链接过程就已经复制好了)中 ,这种库称为静态库,其特点是exe中包含了 库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中 了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件 动态库 :动态链接库是一个包含 可由多个程序同时使用 的代码和数据的库,DLL不是可执行文件。动态链接(这就是它名字的由来)提供了一种方法,使进程可以调用不属于其可执行代码的函数(比如exe调用静态库函数时,这部分代码已经被复制到exe中了)。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件 那么上述静态库和动态库中的lib有什么区别呢? 静态库中的lib :该LIB包含函数代码本身(包括函数的索引+实现),在编译时直接将代码加入程序当中 动态库中的lib

idea Springboot启动时内嵌tomcat报错-An incompatible version [1.1.33] of the APR based Apache Tomcat Native

99封情书 提交于 2019-11-27 12:06:06
本文参考文章: https://blog.csdn.net/m0_37941483/article/details/93378676 原因:安装了基于APR的Apache Tomcat本机库的不兼容版本[1.1.13],但是Tomcat需要的版本是[1.2.14]需要在C:\Windows\System32目录下安装tcnative-1.dll文件 下载地址: https://tomcat.apache.org/download-native.cgi 1.选择对应的版本号,下载 2.点击1.2.14 3.点击binaries,下载下面的文件 4.将文件放入C:\Windows\System32目录下 来源: https://www.cnblogs.com/wny123/p/11361929.html

VS编译fortran dll时报错“ Error: Product support for your (Comp-FW) license has expired.”

左心房为你撑大大i 提交于 2019-11-27 07:37:42
配置:VS 使用的fortran编译器是 Intel(R) Visual Fortran Compiler 16.0 [Intel(R) 64] (vs的工具—>选项里面可以查看) 以ap8ae8.for源代码编译windows 64位dll为例: 建工程(Project)的时候,选择动态链接库(Dynamic-Link Library)即可。 如果你用的是Compaq Fortran,新建的方法是 File-》New-》Projects-》 -》Intel(R) Visual Fortran -》Library-》Dynamic-Link Library,建完之后你再通过Source Files-》Add Files to Folder添加你现有的ap8ae8.for,编译,在Debug或Release文件夹下就可以找到你编译的DLL文件了 但是我的报错:Error: Product support for your (Comp-FW) license has expired 回想起来,我使用的Fortran编译器是之前申请的学生免费版本,那个序列号的有效期是一年,到期后就会显示许可证过期。所以需要重新激活。 步骤: (1) https://software.intel.com/en-us/qualify-for-free-software/student