DLL文件生成方法
- 格式:pdf
- 大小:169.49 KB
- 文档页数:5
(原创)VS2019VB如何⽣成DLL⽂件,调⽤DLL ⼀。
⽣成DLL1.打开VS2019,--->"创建新项⽬"------>"类库(NET Framework)---->下⼀步2. 输⼊项⽬名称:bell,3. 输⼊保存位置:D:\4. 点击右下⽅“创建”5.输⼊如下代码:Public Class LearnDLLFunction ABC()ABC = "你好!我学学怎么建⽴DLL⽂件,并怎么调⽤。
"End FunctionEnd Class5.按F5或启动------> "确定"6.这时,在如下⽂件夹中就⽣成了:D:\BELL\bin\Debug\BELL.dll⼆.调⽤dll⽂件1.在vs2019中新建window窗体应⽤程序2. 输⼊项⽬名称:WindowsApp13. 输⼊保存位置:D:\4. 点击右下⽅“创建”5.在窗体Form1中,添加Textbox1控件:6.项⽬----添加引⽤7. 浏览 D:\BELL\bin\Debug\BELL.dll---->添加8.在BELL.DLL前打对号----->确定9.双击Form1窗体,在代码页输⼊⼀下代码:Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.LoadDim Goodmood As New BELL.LearnDLLTextBox1.Text = goodmood.ABCEnd SubEnd Class10,编译运⾏。
dll文件生成流程
1、在Matlab 命令窗口输入命令dotnettool,弹出Matlab Builder窗口
图2 dotnettool的图形界面
2、在File菜单中,点击New Project,弹出New Project Settings窗口,在
Component name内,填入工程名(可任取),然后在Compiler options 内,选择Create a singleton MCR和Show Verbose output两选项。
点击OK,弹出Project Directory 窗口,点击Yes,返回Matlab Builder窗口。
(Project directory必须置于Matlab安装目录的work文件下)
图3 设置相关内容
图4 询问是否创建目录
3、在Matlab Builder窗口,点击M-Files,然后点击Add File,弹出Add File
to Project窗口,选择需要编译的M文件。
图5 选择编译文件界面
4、在Matlab Builder窗口,点击Build菜单中.NET Object,进行编译。
图6 编译过程
5、编译完成后,点击File菜单中Package Component,弹出Package Files窗
口,点击Creat,对当前工程中必要的文件打包。
图7 打包组件选项。
反编译C#的dll⽂件并修改,再重新⽣成dll
1、把dll⽂件导⼊到ildasm⼯具中,ildasm是由微软提供的.net程序反编译⼯具,位于“C:\Program Files (x86)\Microsoft
SDKs\Windows\v7.0A\Bin”
2、在ildasm中File->dump,把dll⽂件转储为*.il⽂件存到某个指定⽂件夹⾥,得到*.il和*.res两个⽂件,有时也会有*.resource⽂件
3、⽤记事本打开得到的*.il⽂件,找到对应的⽅法,进⾏修改(如果修改的代码太多,那则需要先学习⼀下“C#反编译之IL语法”),具体情况具体分析,修改之后保存。
4、打开DOS命令,进⼊到 c:\Windows\\Framework\v2.0.50727> ⽂件夹,然后输⼊命令:ilasm /dll/resource=a.res a.il(注意a.res和a.il两⽂件夹位置不可变),回车,就在对应⽬录下⽣成新的dll⽂件,如果不放⼼,可以⽤Refletor反编译⼯具重新反编译新的dll⽂件,检查代码。
dll文件生成方法
DLL(动态链接库)文件的生成可以通过多种方式,其中一种简单的方法是通过 Microsoft Visual Studio 这样的集成开发环境(IDE)进行。
下面是详细的步骤:
1. 创建环境:首先,确保你已经安装了 Microsoft Visual Studio。
其他版本的 Visual Studio(如 Visual Studio 2022)也可以,但步骤大致相同。
2. 创建 DLL 项目:
打开 Visual Studio。
选择“新建项目”。
在项目模板中选择“DLL”。
输入 DLL 的名称,然后点击“确定”。
3. 编写 DLL 代码:在创建的项目中,你可以开始编写 DLL 的代码。
一个简单的 DLL 可能包含一个导出函数。
4. 编译 DLL:
在 Visual Studio 中,点击“生成”菜单,然后选择“生成解决方案”或直接按 F7 键。
5. 检查生成的 DLL:编译成功后,可以在项目文件夹的“Debug”或“Release”子文件夹下找到生成的 DLL 文件。
6. 测试 DLL:为了测试 DLL 是否正常工作,你可以创建一个新的Windows 应用程序项目,并在其中调用你的 DLL。
7. 分发 DLL:如果你想将 DLL 分发给其他人,只需将 DLL 文件和任何依赖项一起打包即可。
请注意,这只是生成 DLL 的其中一种方法。
还有其他工具和平台(如 Linux)可以使用,具体取决于你的需求和环境。
VisualC、delphi或者vb等编程语言来编写的DLL文件,在编译完成以后,产生DLL文件[wen jian]已经是一个可以直接供计算机使用的二进制文件,而Visual c#生成的DLL不是独立运行的程序,是某个程序的一个部分,只能由所属的程序调用,用户不能也不需要打开它,Visual C#编译器生成的托管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码,实际上是一种中间语言(IL)代码,需要经过"下一代窗口服务"( Next Generation Windows Services,简写为NGWS ) runtime的即时编译器(即JIT)进行编译。
用Visual C#生成的DLL文件已经和以前的DLL文件有了本质上的区别。
用Visual C#生成的DLL文件在程序设计中更多的表现为一种类(Class)或者类库(Class Library)。
如果想在vc++的非托管代码中调用已经用VC#生成的托管的DLL,从两个方向进行调整可以产生两种办法:(visual studio 2008)(下面方法都是对于同一平台下,即C#跟VC++都是在windows 平台下)一、对VC++的环境中进行修改使其支持托管代码:vc++调用端增加公共语言运行时【clr】的支持以执行C#的程序:【解决方案】 ->【 Properties】(右键)-> 【Configuration Properties】(展开左树) -> 【General】(打开子节点) -> 【Common Language Runtime support】(选中选项) ->【Common Language Runtime support(/clr)】(选中)OK,现在就可以引入托管的动态连接库来用了,不过在调用时还是得注意语法(new->gcnew,....),例如下:#include "stdafx.h"#using "SmartDeviceDLL.dll"using namespace SmartDeviceDLL;int _tmain(int argc, _TCHAR* argv[]){printf("1111111111111\n");SmartDeviceDLL::ICalculator ^pICalc= gcnew SmartDeviceDLL::Class1();long lResult =0;lResult=pICalc->Add(5,10);wprintf(L"the result is %d\n",lResult);printf("222222222222222222\n");char c;scanf("%c",&c);return 0;}二、C#生成DLL端编译成COM接口,供VC++以托管格式调用(命令的运行都是在visual studio command prompt (命令窗口)中)1.新建一个C#的动态连接库(在模板,下单击类库):using System;using System.Linq;using System.Collections.Generic;using System.Text;namespace SmartDeviceDLL{public interface ICalculator{int Add(int Number1, int Number2);}public class Class1: ICalculator{public int Add(int Number1, int Number2){return Number1 * Number2;}public static int TestMethod(String s){Console.WriteLine("Managed assembly: [0]", s);return s.Length;}}}2.为程序集创建一个强命名的类库,并在AssemblyInfo.cs文件中用AssemblyKeyFile属性指向它:1)、使用强命名工具(Strong Name Utility)产生密钥对:sn -k MyKeyFile.snk2)、在AssemblyInfo.cs文件中用AssemblyKeyFile属性指向它:即在项目的文件AssemblyInfo.cs中将[assembly: ComVisible(false)]用以下内容替换:[assembly: ComVisible(true)][assembly: AssemblyDelaySign(false)][assembly: AssemblyKeyFile("MyKeyFile.snk")] //指向刚生成的文件(可用无汉字的绝对路径)3)、重新编译,产生的程序集就是经过签名后的程序集了3.把生成的库文件加入全局程序集缓存(Global Assembly Cache, .NET [Compact]Framework支持一个工具,通常位于:C\Wndows\Assembly下)以便可以从任何COM 客户端激活它,可以使用工具GACUtil.exe,指定/i命令开关将一个程序集安装到GAC中,同样可以使用/u命令开关将一个程序集从GAC中卸载。
c++中.dll与.lib⽂件的⽣成与使⽤的详解两种库:• 包含了函数所在的DLL⽂件和⽂件中函数位置的信息(⼊⼝),代码由运⾏时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。
• 包含函数代码本⾝,在编译时直接将代码加⼊程序当中,称为静态链接库static link library。
共有两种链接⽅式:• 动态链接使⽤动态链接库,允许可执⾏模块(.dll⽂件或.exe⽂件)仅包含在运⾏时定位DLL函数的可执⾏代码所需的信息。
• 静态链接使⽤静态链接库,链接器从静态链接库LIB获取所有被引⽤函数,并将库同代码⼀起放到可执⾏⽂件中。
两种⽂件的区别使⽤lib需注意两个⽂件:•.h头⽂件,包含lib中说明输出的类或符号原型或数据结构。
应⽤程序调⽤lib时,需要将该⽂件包含⼊应⽤程序的源⽂件中。
•.LIB⽂件。
使⽤dll需注意三个⽂件:•.h头⽂件,包含dll中说明输出的类或符号原型或数据结构的.h⽂件。
应⽤程序调⽤dll时,需要将该⽂件包含⼊应⽤程序的源⽂件中。
•.LIB⽂件,是dll在编译、链接成功之后⽣成的⽂件,作⽤是当其他应⽤程序调⽤dll时,需要将该⽂件引⼊应⽤程序,否则产⽣错误(如果不想⽤lib⽂件或者没有lib⽂件,可以⽤WIN32 API函数LoadLibrary、GetProcAddress装载)。
•dll⽂件,真正的可执⾏⽂件,开发成功后的应⽤程序在发布时,只需要有.exe⽂件和.dll⽂件,并不需要.lib⽂件和.h头⽂件。
1.⽣成lib⽂件 ⾸先,我们先建⽴⼀个控制台⼯程(新建->⼯程->控制台程序),添加sub.cpp以及sub.h⽂件。
//sub.h#ifndef _SUB_H#define _SUB_Hvoid sub(int a,int b);#endif//sub.cpp#include "sub.h"#include <iostream>void sub(int a,int b){std::cout<<(a-b)<<std::endl;}由于在⼯程中,没有main()函数,所以直接编译出错。
dll实现原理DLL(动态链接库)是一种可执行文件,其主要作用是在程序运行时提供可被其他程序调用的函数和数据。
DLL实现的原理可以分为以下几个步骤:1. 编写源代码:首先,开发人员编写源代码,其中包含了需要实现的函数和数据结构。
2. 编译源代码:编译器将源代码编译成目标代码(通常是二进制形式),生成一个目标文件。
3. 链接目标文件:链接器将目标文件与其他依赖的目标文件(如果有的话)进行链接,生成一个可执行文件。
4. 导出函数和数据:在可执行文件中,需要将DLL中的函数和数据标记为可供其他程序调用。
这一步骤通常需要使用特定的关键字或修饰符来声明导出的函数和数据。
5. 生成DLL文件:最后,将可执行文件的一部分或全部内容提取出来,生成一个独立的DLL文件。
这个DLL文件包含了所有导出的函数和数据,在运行时可以被其他程序动态加载和调用。
当其他程序需要使用DLL中的函数或数据时,需要进行以下步骤:1. 导入DLL:程序在运行时,通过特定的方式加载DLL文件。
操作系统会负责将DLL加载到内存中,并为其分配一块地址空间。
2. 获取导出函数地址:程序需要使用DLL中的函数时,需要首先获取函数的地址。
可以使用操作系统提供的函数,如GetProcAddress(),通过传入函数名和DLL的句柄来获取函数地址。
3. 调用DLL函数:一旦获取到函数地址,程序就可以通过函数指针来调用DLL中的函数,传递参数并获取返回值。
4. 释放DLL:当程序不再需要使用DLL时,需要显式地将DLL从内存中释放,以免造成资源浪费。
操作系统提供相应的函数,如FreeLibrary(),来释放已加载的DLL。
总结起来,DLL的实现原理是通过将函数和数据打包为一个独立的动态链接库文件,并提供导出函数的地址,让其他程序可以动态加载和调用其中的函数和数据。
这种实现方式使得程序的开发和维护更加灵活和高效。
DLL的创建与调用1、DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。
这些可以直接拿来使用。
静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。
静态链接库把最后的指令都包含在最终生成的EXE 文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。
(2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。
动态链接库的分类:Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。
非MFC动态库不采用MFC 类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。
2、创建一个DLL2.1 非MFC的DLL2.1.1声明导出函数:extern “C” __declspec(dllexport) int add(int a, int b);其中extern “C”为声明为C编译。
由于C++编译器在编译的时候会造成其函数名的该变,在其他应用程序中导致函数不可调用,而C编译器则不会在编译后改变其函数名。
这样如果用C编译的程序来调用该dll中的函数时,可能会造成找不到该函数。
__declspec(dllexport)表示该函数为DLL输出函数,即其他应用程序可以调用该函数从dll中声明输出函数有两种方式:(1)另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。