dll文件

让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100....

两盒软妹~` 提交于 2019-12-05 11:47:01
让VC编译出来的程序不依赖于msvcr80.dll/msvcr90.dll/msvcr100.dll等文件 正常情况下,当我们用VC编译出一个Console/Win32类型项目的exe程序时(这里暂不考虑MFC程序),会依赖于msvcrxx.dll文件(xx为不同VC对应的版本号,VC2005为80,VC2008为90,VC2010为100),发布程序的时候,就需要把对应的dll也copy过去,比较不方便。 通过以下的方法,可以让exe不依赖于这些dll(不过生成的exe会大很多) 以VC2010英文版为例,切换到Solution Explorer视图,在项目上右击,选择Properties,Configuration选项选中Release,依次点击Configuration Properties->C/C++->Code Generation->Runtime Library,选择/MT即可。以Release方式重新Build项目,在Release文件夹下即可生成不依赖于msvcr100.dll的exe文件。 下面简单说明Runtime Library四个选项的含义: (D表示Dll,而d表示debug版本) MT(Multi-threaded):多线程版本 MTd(Multi-threaded debug):多线程调试版本 MD(Multi-threaded Dll)

C#调用DLL库的方法

╄→гoц情女王★ 提交于 2019-12-05 10:03:07
  最近工作需要使用C#调用DLL,公司代码不能公开就转载加一些自己的笔记记录一下。使用软件VS2008和VS2017。 1 C#静态调用DLL 1.1 建立VC工程CppDemo,建立的时候选择Win32 Console(dll),选择Dll。 1.2 在DllDemo.cpp文件中添加这些代码。 extern "C" __declspec(dllexport) int Add(int a,int b) { return a+b; } View Code 1.3 编译工程。 1.4 建立新的C#工程,选择Console应用程序,建立测试程序InteropDemo 1.5 在Program.cs中添加引用:using System.Runtime.InteropServices; 1.6 在pulic class Program添加如下代码: using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; // 用 DllImport 需用此 命名空间 namespace InteropDemo { class Program { [DllImport("CppDemo.dll", EntryPoint = "Add",

IAT表和导入表

余生长醉 提交于 2019-12-04 23:29:49
1.关于IAT(import address table)表 当exe程序中调用dll中的函数时,反汇编可以看到,call后面并不是跟的实际函数的地址,而是给了一个地址; 这些连起来就是一张表,就是IAT表; 1)内存镜像中的dll中函数的调用; 例如:一个exe中调用系统提供的dll中的MessageBox函数时: 可以看到call的地址是42d2c4; 查看42d2c4中的内容: 可以看到:42d2c4中保存的是762b0026; 762b0026是dll的领空;也就是dll中MessageBox函数的地址; 总结: exe程序调用dll中的函数时,会使用FF15call; call的并不是实际的函数地址,而是该函数对应的IAT表的地址; 通过IAT表来找到实际的函数地址; 2)文件镜像中的IAT相关 接下来取文件中找42d2c4中保存的内容; 需要将RVA转成FOA; 42d2c4-400000 = 2d2c4;在.idata节; foa = 2d2c4 - 2d000 + 2b000 = 2b2c4; 可以看到:文件镜像中保存的值为2d2f4; 继续追到2d2f4,对应的foa为2b2f4 看到并不是MessageBox的地址,而是一MessageBox先关的描述; 结论:IAT表在文件和内存中是不一样的; 3)原因分析 对于一个exe程序,在运行时会加载到独立的4gb空间

【已解决】Windows平台,QT程序运行错误:it could not find or load the Qt platform plugin \"windows\"

…衆ロ難τιáo~ 提交于 2019-12-04 21:06:40
一般出现这种问题,说明是缺了QT相关的DLL。根据你是Debug版或Release版不同,依赖不同的DLL。 开发阶段如果出现这种提示,一般是QT安装过程出现问题,需要重新安装。 而开发完毕,如果是通过VS启动程序,能正确运行。但在可执行目录下双击EXE文件,启动报错,较大概率是缺少DLL所致。 网上博客解决办法千篇一律,往往都是让你把QT Plugins里的Platform或其它文件夹里缺的东西拷过来。但如果缺的不是Plugins里的DLL,而是其它的呢? 下面通过Process Explorer工具来分析通过VS启动程序(CTRL+F5或F5调试运行)时,EXE程序依赖了哪些DLL。 在PE中查看依赖的DLL,需要调出DLL菜单。方法是,点击view——Lower Pane View,选择DLLS,并且勾选Show Lower Pane。 之后,任选一个进程,就会在下方窗口显示依赖DLL 按F5启动问题程序,查看相关依赖项。 红框中显示的就是遗漏的DLL。在EXE目录里添上就好。 Dependency这种静态 来源: https://www.cnblogs.com/japelly/p/11883937.html

WPF程序将DLL嵌入到EXE的两种方法

三世轮回 提交于 2019-12-04 20:54:19
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是《Visual Studio 版本转换工具WPF版开源了》的续,关于《Visual Studio 版本转换工具WPF版开源了》可以参看地下地址(两篇是一样的): 开源中国 http://my.oschina.net/chinesedragon/blog/308336 CNBLOGS http://www.cnblogs.com/luoshupeng/p/3946635.html 引言 前几一写了一个小工具————《 Visual Studio版本转换工具 》,由于使用了WPF做为界面,因此这个小程序运行必须附带两个DLL:Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll,同时由于自己也写了一个库,一个小程序需要附带3个DLL,这种体验真的很不爽,于是就着手把DLL嵌入到EXE中去。 挫折 对于C#程序,要把DLL嵌入到EXE中去,最权威和最常见的方法就是使用ILMerge这个工具,这是个命令行工具,有很多参数,可以将DLL很完美的嵌入到EXE中去,如果嫌命令行麻烦,也有人开源开发了图形界面ILMergeGUI,这两个工具的下载和帮助地址如下: ILMerge http://www.microsoft.com/en-us

不在同一个解决方案下的exe去调试dll,采用附加到进程:

一个人想着一个人 提交于 2019-12-04 14:06:22
先把dll的项目生成一下,把得到的pdb,dll文件复制到exe目录下,然后直接双击运行exe(不是通过vs启动),再接着在dll的项目中”调试”->”附加到进程”,选择刚才运行的exe. 注意:使用release模式进行调试时,对优化进行关闭. 不好用时,可以采用”以应用程序验证程序开始”方式:(如果需要更改指定的exe,可以到 属性-》调试-》命令中把里面的内容清空。) 如果dll2依赖dll,则同样的方式去把dll2的.dll和.pdb放到exe下. 来源: https://www.cnblogs.com/Stephen-Qin/p/11869566.html

VS2010运行时库参数设置说明

一笑奈何 提交于 2019-12-04 12:46:45
错误 1 error LNK2005: __cexit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义 d:\ProjectArchive\LibH264\LibH264\libcmtd.lib(crt0dat.obj) LibH264 错误 2 error LNK2005: __amsg_exit 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义 d:\ProjectArchive\LibH264\LibH264\libcmtd.lib(crt0dat.obj) LibH264 错误 3 error LNK2005: __initterm_e 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义 d:\ProjectArchive\LibH264\LibH264\libcmtd.lib(crt0dat.obj) LibH264 错误 4 error LNK2005: ___CppXcptFilter 已经在 MSVCRTD.lib(MSVCR100D.dll) 中定义 d:\ProjectArchive\LibH264\LibH264\libcmtd.lib(winxfltr.obj) LibH264 错误 5 error LNK2005: __encoded_null 已经在 MSVCRTD.lib(MSVCR100D

JAVA java调用C++动态链接库dll,有详细过程。VS2015+Eclipse以及失败解决方案

↘锁芯ラ 提交于 2019-12-04 06:39:17
一、新建Java工程,在Java类中声明一个native的方法 新建Java项目 在新建的项目中创建packet(包),并且在包下创建一个Class(类)。 接下来,在该类中添加如下代码: ? 1 2 3 4 5 6 7 8 9 public class JavaInvodeCPlus { //声明为native,表明是有外部来实现的 public native String returnHelloWorldToUpcase(String string); public native void sayHelloWolrd(); } 二、使用Javah命令生成native方法的声明的C/C++头文件 进入该项目所在的位置,博主这里的位置是D:\00Coding\my-space\JavaInvokeCPlus 接着进入bin目录下,找到该packet下存在一个.class文件 我们需要用javah命令来生成头文件。回到bin目录下,因为这里涉及到包名,所以必须在包目录下来。按住shift键,同时在文件夹内空白处右击,可以进入命令行。当然,你也可以一步步进入到该路径下。 这里需要注意的是,文件的末尾不加上.class后缀。然后我们可以看到在bin目录下多了一个.h头文件。 打开我们可以看到如下代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

深入了解tcmalloc(一):windows环境下无缝拦截技术初探

柔情痞子 提交于 2019-12-04 02:16:31
概述: 又到了一个总结提炼的阶段,这次想具体聊聊游戏引擎中使用的内存管理模块 tcmalloc 组件的使用心得。项目的前期曾经遇到过内存瓶颈,特别是 windows 系统下的客户端程序在经历长时间运行之后会出现内存占用率很高疑似泄漏的现象,排查了很久都没有找到原因,甚至一度无法定位问题出自游戏脚本层还是引擎层,后来在引擎中链接了 tcmalloc 组件,通过实时 dump 程序的内存信息最终找出了泄漏的元凶。 tcmalloc 的另一个优势就是通过高效率内存分配来提高游戏运行时性能,不得不说在使用 tcmalloc 之后,整个游戏的稳定性和效率都有了很大的提升。为了今后更有效和稳定地使用 tcmalloc 组件,就在这里深入剖析一下这个神器。 Tcmalloc 是 Google Perftools 中的一个组件,提供一整套高效健壮的内存管理方案,比传统 glibc 的内存分配和释放要快数倍;其次,基于 tcmalloc 之上的 heapprofiler 可以实时 dump 程序中 heap 的使用信息,是一个很好的检测内存泄漏的辅助工具;同时 tcmalloc 的使用又是极其方便,只需要在编译时增加一个链接选项,就可以无缝拦截 (patch) 原生操作系统运行库中的内存分配和释放接口,而无需修改已经完成的项目工程代码,大大减少移植整合的成本。 在 windows 平台下,

Navicat安装及使用

谁说我不能喝 提交于 2019-12-04 01:04:51
一、安装Navicat 1、下载安装文件:navicat11.0.17_premium_cs_x86.exe(32位) 2、Oracle 的 Instance Client:instantclient_19_3 (32位) 3、 instantclient_19_3解压完成即可 4、navicat11.0.17_premium_cs_x86.exe安装完成后,在Navicat配置oci.dll文件: 1)打开Navicat->选择工具->选项,进入配置页面; 2) 选择oci->选择instantclient_19_3->oci.dll文件放置的文件地址,点击确定。 3)重新启动Navicat,进行数据库的连接测试,此时已经可以连接成功。 二、连接数据库(oracle为例) 注意: navicat连接oracle数据库失败:cannot load OCI DLL,87 1 获得oci.dll文件 有两种方式: 1)如果你电脑上已经安装了oracle数据库,那么你就可以直接使用,目录为:oracle的安装目录\bin\oci.dll; 2)第二种方式:根据 Navicat 官方的文档,只需要下载 Oracle 的 Instance Client 即可。这个包只包含一些 dll 文件,无需安装解压即可(要注意的而是看清楚对应的版本)。 来源: https://www.cnblogs