dll文件

动态加载AppDomains

江枫思渺然 提交于 2019-12-21 04:51:41
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统,这个WinService系统管理的形形色色各种各样的服务,这些服务也是各个"插件式"的类库,例如: public interface IJob { void Run(DateTime time); } public class CollectUserInfo : IJob { public void Run(DateTime time) { //doing some thing... } } 我们提供了一个IJob接口,所有"服务"都继承该接口,然后做相关的配置,在服务启动时,就可以根据配置,反射加载程序集,执行我们预期的任务. 更新程序集(dll/exe) 服务/插件程序(后面只称为服务,虽然两者应用不同,但是在此处他们所运用的原理和作用是相同的 :-) )很健稳的运行着.但在服务/插件程序运行一段时间之后,某些"插件"的业务需求发生的变化,或者版本升级等种种外部原因,导致我们对原本的"插件"程序集进行了升级(可能从v1.0升级至v2.0).当我们想像Asp.net应用一样.把新的dll替换旧dll的时候,错误发生了. 发生该错误的原因很简单,因为我们的程序中已经调用了该dll

WinForm皮肤控件(SkinEngine)

爷,独闯天下 提交于 2019-12-20 10:58:38
利用 IrisSkin2.dll 所提供的控件 SkinEngine 来为窗体添加皮肤。 IrisSkin2.dll 及 皮肤素材,下载地址: http://download.csdn.net/source/1744355 1. 先把IrisSkin2.dll文件添加到当前项目引用(解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin2.dll文件.....之后就不用我说了吧^_^).IrisSkin2.dll文件最好放在当前项目\bin\Debug文件中. 2. 然后把IrisSkin2.dll文件添加到vc2005的工具箱:右键->选择项->浏览找到IrisSkin2.dll文件(文件最好放在当前项目\bin\Debug文件中)按确定,控件就添加到工具箱中了.然后把工具箱中新添加的 SkinEngine控件拖到当前项目中。 3. 把皮肤目录中的.ssk文件复制到当前项目\bin\Debug文件中,(ssk文件可选). 4. 再在项目中调用.ssk皮肤文件。例: namespace 当前项目 { public partial class Form1 : Form { public Form1() //当前项目的构造器中调用皮肤文件 { InitializeComponent(); this.skinEngine1.SkinFile =

如何将项目中繁多DevExpress的dll存放到指定文件夹

放肆的年华 提交于 2019-12-19 22:00:46
一个标准的Dev项目,一般情况下都会引用到众多的DevExpress的相关dll,如果全部在启动路径下的话,着实不雅。所以有必要把Dev的这些dll存放到指定路径,也方便管理,步骤如下 1、在项目中,将Dev的所有dll的复制到本地的属性修改成false; 2、为项目添加一个配置文件app.config,并复制以下内容,其中devdlls即为你要存放的dev的相关dll文件夹名 <?xml version="1.0" encoding="utf-8" ?> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath="devdlls"/> </assemblyBinding> </runtime> </configuration> 3、在启动路径下创建(bin\debug或者bin\release ,即为你启动exe路径)文件夹devdlls 4、利用dev 提供的项目dll分析工具DevExpress Assembly Deployment Tool 分析当前项目用到的相关Dev的dll,并且将分析后的dev 的程序集deploy到刚才的devdlls路径下 重新编译即可 注意,如果项目的dev的版本有更新的话

QT中使用外部库dll文件的方法

♀尐吖头ヾ 提交于 2019-12-18 21:45:36
1.将lib文件放入项目文件夹中 2.将dll文件放入项目的.exe所在的文件夹中 3.在pro文件中加入如下一行,即lib文件的目录 LIBS += "C:\Users\Administrator\Documents\KeyMousBox\my.lib 4.向项目中引入dll随带的.h头文件 来源: CSDN 作者: qq_43058397 链接: https://blog.csdn.net/qq_43058397/article/details/103604226

手把手教delphi:写你的dll文件(2)

依然范特西╮ 提交于 2019-12-18 18:52:14
在Delphi中静态调用DLL top 调用一个DLL比写一个DLL要容易一些。首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较。同样的,我们先举一个静态调用的例子。 unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} //本行以下代码为我们真正动手写的代码 function TestDll(i:integer):integer;stdcall; external ’Delphi.dll’; procedure TForm1.Button1Click(Sender: TObject); begin Edit1.Text:=IntToStr(TestDll(1));

C 运行时库 /MT /MTD /MD /MDD

寵の児 提交于 2019-12-17 22:20:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 转自: http://blog.csdn.net/miyunhong/article/details/5309130 VC编译选项 多线程(/MT) 多线程调试(/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd) C 运行时库 库文件 Single thread(static link) ML libc.lib Debug single thread(static link) MLd libcd.lib MultiThread(static link) MT libcmt.lib Debug multiThread(static link) MTd libcmtd.lib MultiThread(dynamic link) MD msvert.lib Debug multiThread(dynamic link) MDd msvertd.lib 3. 各种 C 运行时库的区别 ( 1 )静态链接的单线程库 静态链接的单线程库只能用于单线程的应用程序, C 运行时库的目标代码最终被编译在应用程序的二进制文件中。通过 /ML 编译选项可以设置 Visual C++ 使用静态链接的单线 程库。 ( 2 )静态链接的多线程库 静态链接的多线程库的目标代码也最终被编译在应用程序的二进制文件中

python调用c\\c++

眉间皱痕 提交于 2019-12-16 23:47:50
前言 python 这门语言,凭借着其极高的易学易用易读性和丰富的扩展带来的学习友好性和项目友好性,近年来迅速成为了越来越多的人们的首选。然而一旦拿python与传统的编程语言(C/C++)如来比较的话,人们往往会想到效率问题。本文不打算探讨语言之间的比较,然而python实际使用时确实会有能用更底层的C/C++更好的情况,因此本系列旨在介绍几种相对常见的 python环境下调用C/C++ 的方法。(挖坑:CTYPES,SWIG,BOOST.PYTHON,CYTHON) 阅读这篇文章需要什么? 语言:简单的python基础与简单的C/C++基础。 C/C++的环境与python的环境。 步步跟进 搜索引擎/工具书 随时查询不明白的地方。 PS:本文中会有一些延伸性的知识点,加之本人语文水平惨不忍睹导致文风惊悚,所以 如果阅读途中感到不适请务必跳过延伸性的部分(用大括号括起来的部分) 。 目录 一、环境配置 二、C/C++一侧 库 代码 extern "C" extern 和 static #ifdef DLL_EXPORT __cdecl和__stdcall 三、CTYPES 加载 数据类型 访问导出变量 函数进出参数的定义 argtypes restype 指针和引用 数组 小结 四、参考资料 一、环境配置 介于这是本系列的第一篇,我简单介绍一下环境(vim

Sqlite3 ImportError: DLL load failed

孤街浪徒 提交于 2019-12-15 09:07:24
在pycharm里面应用了anaconda下面的python模块sqlite3,出现以下错误, 根据错误提示,这是因为在该路径下,DLLs文件夹里没有sqlite3.dll文件和sqlite3.def文件,这个可以对比另外的python路径下的DLLs文件夹,里面如果有,则复制过来即可,如果都没有,可以自行去官网( https://sqlite.org/download.html )上下载文件到该路径,即可解决问题。 来源: https://www.cnblogs.com/liyanyinng/p/12041873.html

动态载入DLL所需要的三个函数详解(LOADLIBRARY,GETPROCADDRESS,FREELIBRARY)

你。 提交于 2019-12-12 15:38:18
动态载入 DLL 动态载入方式是指在编译之前并不知道将会调用哪些 DLL 函数, 完全是在运行过程中根据需要决定应调用哪些函数。 方法是:用 LoadLibrary 函数加载动态链接库到内存,用 GetProcAddress函数动态获得 DLL 函数的入口地址。当一个 DLL 文件用 LoadLibrary 显式加载后,在任何时刻均可以通过调用 FreeLibrary 函数显式地从内存中把它给卸载。 动态调用使用的 Windows API 函数主要有 3 个, 分别是 LoadLibrary、 GetProcAddress 和FreeLibrary。 我们分别详细介绍这三个函数的功能,因为无论学习编程还是逆向这是三个函数都是非常常用滴。 (1)LoadLibrary 函数 注:Delphi 中还提供了 SafeLoadLibrary 函数,它封装了 Loadlibrary 函数,可以装载由 Filename 参数指定的 WindowsDLL或 Linux 共享对象。它简化了DLL的装载并且使装载更加安全。 [格式]: function LoadLibrary(LibFileName : PChar): Thandle; 复制代码 [功能]:加载由参数 LibFileName 指定的 DLL 文件。 [说明]:参数 LibFileName 指定了要装载的 DLL 文件名,如果

__declspec(dllimport)和__declspec(dllexport)的区别,以及有关c/c++调用约定

为君一笑 提交于 2019-12-12 14:05:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> DLL可以使用两种方法将公共符号导入到应用程序中或从 DLL 导出函数: 生成 DLL 时使用模块定义 (.DEF) 文件。 在主应用程序的函数定义中使用 __declspec(dllimport) 或 __declspec(dllexport) 关键字。 使用 .DEF 文件 模块定义 (.DEF) 文件是包含一个或多个描述各种 DLL 属性的 Module 语句的文本文件。如果不使用 __declspec(dllimport) 或 __declspec(dllexport) 导出 DLL 函数,则 DLL 需要 .DEF 文件。 可以使用 .DEF 文件导入到应用程序中或从 DLL 导出。 使用 __declspec 32 位版的 Visual C++ 用 __declspec(dllimport) 和 __declspec(dllexport) 取代以前在 16 位版的 Visual C++ 中使用的 __export 关键字。 不使用 __declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport) 使编译器可以生成更好的代码。编译器之所以能够生成更好的代码,是因为它十分清楚函数是否在 DLL 中,因此可以生成跳过间接级别的代码,而在跨 DLL