VS2005创建自己的DLL库

合集下载

使用vs建立动态链接库dll过程和使用方法

使用vs建立动态链接库dll过程和使用方法

使用vs建立动态链接库dll的过程和使用方法创建动态链接库(DLL)的过程可以分为几个步骤。

我将使用Visual Studio 来演示这个过程:创建DLL的步骤:1.打开Visual Studio,选择“文件”->“新建”->“项目”。

2.在新项目窗口中,选择“Visual C++”->“Windows桌面向导应用程序”。

3.输入项目名称和位置,然后点击“确定”。

4.在“解决方案资源管理器”中,右键单击项目名称->添加->新建项。

5.在“添加新项”窗口中,选择“DLL”,输入DLL名称,然后点击“添加”。

编写DLL代码:现在你已经有了一个空的DLL,你可以开始编写你的代码了。

例如,你可以添加以下代码到你的.cpp文件中:在这个例子中,我们创建了一个简单的函数add,它接收两个整数并返回它们的和。

extern "C"部分告诉编译器使用C链接规则创建导出函数,__declspec(dllexport)部分使得该函数可以从DLL中导出。

编译和生成DLL:在Visual Studio中,你可以通过点击“生成”菜单然后选择“生成解决方案”来编译和生成你的DLL。

如果编译成功,你可以在你的项目文件夹的Debug或Release 文件夹中找到生成的DLL文件。

使用DLL:使用DLL的过程可以分为几个步骤:1.加载DLL:使用Windows API函数LoadLibrary可以加载DLL。

例如:HMODULE hMod = LoadLibrary(TEXT("MyDLL.dll"));。

这个函数会返回一个模块句柄,如果DLL加载成功的话。

2.获取函数地址:使用GetProcAddress函数可以获取DLL中函数的地址。

例如:add_proc = (int (*)(int, int))GetProcAddress(hMod, "add");。

VS2005 Web引用程序打包并安装数据库

VS2005 Web引用程序打包并安装数据库

VS2005 Web引用程序打包并安装数据库一个解决方案中可能会包含多个类库项目和一个网站,打包过程如下:1、在【解决方案资源管理器】中【右键-添加-新建项目】,左侧选择【其他类型项目】,右侧选择【安装项目】,如下图:2、点击【确定】后,右侧【文件系统】选项卡中选择【应用程序文件夹】-【添加】-【项目输出】,类库项目选择添加【主输出】,网站选择添加【内容文件】3、在网站的制作过程中可能用到一些其他的BLL组件,也需要添加进来,还是选择【应用程序文件夹】-【添加】-【程序集】,选择你网站BIN文件夹下的一些BLL4、因为要带数据库带包,我是采用打包程序利用系统存储过程附加MDF和LDF 文件的方法,所以【应用程序文件夹】中还需要【添加-文件】,将数据库的MDF 和LDF文件添加进来,如果安装的需要在控制面板的添加删除程序列表中有图标的话,也需要将ICO图标文件添加进来。

5、设置安装项目的常用属性:Author:作者Manufactuer:公司Title:安装程序的标题AddRemoveProgramsIco:设置为添加进来的ICO文件如果不带数据库安装的话,可以将安装项目直接生成就可以了,如果Debug设置为True,则生成的MSI文件在Debug文件夹中,如果为False,生成的MSI文件在Release文件夹中。

6、在【解决方案资源管理器】中,右键,添加【新建项目】-【Visual C#】-【类库】,建立数据库安装程序,类库建好后,将默认的Class1.cs文件删除,右键,添加【新建项】-【安装程序类】,下面主要是此类的代码。

7、安装程序类的代码:1using ponentModel;2using System.Configuration.Install;3using System.Collections; //以下引入4using System.Collections.Specialized;5using System.Data;6using System.Data.SqlClient;7using System.Reflection;8using System.Xml;910namespace DbClass11 {12 [RunInstaller(true)]13public partial class InstallDB : Installer14 {15///<summary>16///必需的设计器变量,均来自于安装程序的“自定义操作”视图中的设置17///</summary>18private string hostname;19private string username;20private string userpassword;21private string dbname;2223public InstallDB()24 {25 InitializeComponent();26 }2728private string CreateSqlStr()29 {30string sqlstr = "";31string datafile = Context.Parameters["installdir"] + @"FlowerShop.mdf";32string logfile = Context.Parameters["installdir"] + @"FlowerShop_log.ldf";33sqlstr = "EXEC sp_attach_db @dbname ='"+ Context.Parameters["dbname"] + "',@filename1='"+ datafile + "',@filename2='" + logfile + "'";34return sqlstr;35 }3637private void ExecuteSql(string DatabaseName, string SqlStr) 38 {39string SqlConnectionStr = @"server="+ hostname + ";uid=" + username + ";pwd=" + userpassword;40SqlConnection myConnection = newSqlConnection(SqlConnectionStr);41SqlCommand myCommand = new SqlCommand(SqlStr, myConnection);42 myCommand.Connection.Open();43 myCommand.Connection.ChangeDatabase(DatabaseName);44 myCommand.ExecuteNonQuery();45 myCommand.Connection.Close();46 }4748private void AddFlowerShopDataBase()49 {50 ExecuteSql("pubs", CreateSqlStr());51 }5253private void ModifyXML()54 {55string XMLdir = Context.Parameters["installdir"] + @"Web.config";56 XmlNodeReader reader = null;57 XmlTextWriter writer = null;58 XmlDocument doc = new XmlDocument();59 doc.Load(XMLdir);60 reader = new XmlNodeReader(doc);61writer = new XmlTextWriter(XMLdir, System.Text.Encoding.UTF8);6263try64 {65while (reader.Read())66 {67if(reader.NodeType == XmlNodeType.Element && == "connectionStrings")68 {69string strContent = reader.ReadInnerXml(); 70strContent = "<add name=\"strShop\" connectionString=\"server=" + hostname + ";database=" + dbname + ";uid=" + username + ";pwd=" + userpassword + "\" providerName=\"System.Data.SqlClient\"/>";71 XmlNode root = doc.DocumentElement;72XmlElement elem = doc.CreateElement("connectionStrings");73 elem.InnerXml = strContent;74root.ReplaceChild(elem, root.ChildNodes[1]);75 doc.Save(writer);76break;77 }78 }79 }80finally81 {82if (reader != null)83 reader.Close();84 }85 }8687public override void Install(IDictionary stateSaver)88 {89base.Install(stateSaver);90 hostname = Context.Parameters["hostname"];91 username = Context.Parameters["username"];92 userpassword = Context.Parameters["userpassword"];93 dbname = Context.Parameters["dbname"];94this.AddFlowerShopDataBase();95this.ModifyXML();96 }97 }98 }【注意】最后一个方法Install方法中Parameters中的键名都是与接下来要添加的自定义操作中的变量名要保持一致的,包括上面用到的installdir。

c#创建DLL详解

c#创建DLL详解

内容简介介绍如何是使用C#来完成动态链接库的创建和使用、动态链接库对代码有很好的封装、能很好的保护源代码。

使用图例完整的演示。

使用软件vs2005以及以上版本均可步骤和方法1.新建一个类库。

2.3.编写一个简单的类库实例,例如:DllTest在默认名为:calss1.cs里编写代码一下是一个简单的:在控制台显示“你以成功调用了动态连接!”sing System;using System.Collections.Generic;using System.Text;namespace DllTest{public class Class1{public void ShowMessage(){Console.WriteLine("你以成功调用了动态连接!");Console.ReadLine();}}}4.配置输出,在解决方案上右击——属性,在应用程序选卡中需要注意一下三个内容。

1.程序集名称2.默认命名空间3.输出类型1.DllTest2.DllTest3.类库这些对我调用来说很有用!5.生成dll,在菜单栏在生成里点击“生成dlltest”,或者按shfit+F6生成成功,在目录下能看到生成的Dll:6.调用该dll,新建一个控制台应用程序,来实现该dll的调用。

新建一个DLLExample。

7.在新建的项目内添加引用,引用该dll。

8.9.在“查找范围里找到,我们生成的dll,点击确定。

在解决方案中显示如下内容,说明你添加成功!10.11.这时我就可以在程序中调用了。

在program.cs中添加如下代码:using System;using System.Collections.Generic;using System.Text;//必须添加using System.Runtime.InteropServices;using DllTest;namespace DllExample{class Program{//DllTest,我们的动态链接库[DllImport("DllTest.dll")]//这个很重要publicstaticexternvoid ShowMessage();//public static extern void ShowMessage();static void Main(string[] args){//实例化DllTest.Class1 i = new Class1();//调用动态链接库的方法i.ShowMessage();}}}12.运行结果:注意事项其他应用程序可使用同样的方法调用!。

C#下开发及调用dll文件的方法

C#下开发及调用dll文件的方法

C#下开发及调用dll文件的方法在.net中,可调用的dll(动态链接库)文件其实就是一个类库。

我们可以通过写一个类,然后把它编译成dll文件形式,在其他的项目中就可以直接调用此编译好的dll文件,而不用重复写这个类的代码。

下面详细介绍此过程:一、开发dll文件(1)打开vs2005,新建项目中模板选择“类库”(2)在解决资源管理器里面添加一文件夹“First”,在其中添加两个类MathAdd和MathMinus,在其父目录里直接添加一个名为yun(写这个类的时候,我已经晕了,不知道取什么名字好,于是就yun了)的类。

下面是各个类的代码,注意类前一定要加上public,不然这个类会被当做是私有的,不能够被引用,当初我就是犯了这个错误,弄个了好久才想起,真是追悔莫及啊。

类中的方法为静态或非静态都可以。

MathAdd类代码using System;using System.Collections.Generic;using System.Text;namespace noo.First{public class MathAdd{public int add( int a,int b){return a + b;}public static int Muti(int a, int b){int mutiSum;mutiSum = a * b;return mutiSum;}}}MathMinus类代码using System;using System.Collections.Generic;using System.Text;namespace noo.First{public class MathMinus{public static int minus(int a, int b){return a - b;}}}yun类代码using System;using System.Collections.Generic;using System.Text;namespace noo{public class yun{public int add(int a, int b,int c){return a + b-c;}}到此,dll代码其实已经写好,这里我们可以发现,其实dll文件就是一个一个封装好的类库而已。

在VC中创建DLL文件的方法步骤祥解

在VC中创建DLL文件的方法步骤祥解

今天教大家在中创建文件地方法步骤,一起来学习一下,并不是很难地,相信聪明地你一看就会.一动态链接库.制作地步骤:()新建工程,工程名为,选择类型.文档收集自网络,仅用于个人学习()地内容如下:以下是引用片段:"" () ( )本文所有地例子只有一个即加法函数. 文档收集自网络,仅用于个人学习()地内容如下:以下是引用片段:""""""(,,){;}"" () ( , ) 文档收集自网络,仅用于个人学习{;}()编译之后产生了与两个文件..使用方法:().隐式调用法:将和拷贝到需要应用该地工程地目录下,将拷贝到产生地应用程序地目录下,并在需要应用该中地函数地文件中添加如下几行:文档收集自网络,仅用于个人学习以下是引用片段:""(,"");().显示调用法:将和拷贝到需要应用该地工程地目录下,将拷贝到产生地应用程序地目录下,并在需要应用该中地函数地文件中包含头文件,如:文档收集自网络,仅用于个人学习以下是引用片段:""同时还需要在>>> 地框中增加这个库.文档收集自网络,仅用于个人学习二动态链接库.制作地步骤:()新建()工程,工程名为,选择类型.文档收集自网络,仅用于个人学习()在生成地文件后面增加下面几行:以下是引用片段:( , ){;}()在生成地文件后面增加如下:以下是引用片段:;表示第一个函数是()编译后会产生两个文件.使用方法()隐式调用法:将拷贝到需要应用该地工程地目录下,将拷贝到产生地应用程序地目录下,并在需要应用该中地函数地文件中添加如下几行:文档收集自网络,仅用于个人学习注意这里没有在中声明函数,所以不能直接包含来声明函数.以下是引用片段:(,"");( , );当然如果你地中有很多函数,那可以另外写个,包含所有地函数声明,然后直接将头文件包含进去文档收集自网络,仅用于个人学习()显示调用法:与地调用方法一样,不需要(,"");,但是需要在>>> 地框中增加这个库.文档收集自网络,仅用于个人学习。

Visual_Studio_2005教程(MFC)

Visual_Studio_2005教程(MFC)

Visual C++ 2005教程目录第一章:Windows程序开发简介 (2)DOS中用户使用软件的方式 (2)Windows中用户使用软件的方式 (3)Windows中程序运行的机制 (4)第二章:Windows编程初步 (6)第一个程序 (6)查看系统库函数的帮助说明 (19)设置控件的属性 (20)完成的程序 (24)输入数据的控件 (26)第三章:Windows编程进阶 (33)列表框控件 (34)单选框控件 (36)组合框控件 (37)复选框控件 (40)列表框控件 (44)图片控件 (48)更多的功能 (49)完整的示例代码 (50)第四章:Windows图形编程 (61)创建菜单 (61)创建工具条 (67)绘制图形 (74)第五章:数据库编程 (80)数据库简介 (80)数据库的建立 (80)ODBC数据源的设置方法 (86)数据库的访问方法 (91)一个实际的例子 (95)第六章:线程机制 (114)线程的概念 (114)线程的状态 (114)线程的优先级 (115)线程的创建和管理 (116)一个演示示例 (117)前台线程和后台线程 (119)线程优先级 (120)挂起线程和恢复线程 (121)终止线程 (121)时钟线程 (122)第七章:网络编程 (123)TCP/IP协议原理介绍 (123)Internet概述 (123)TCP/IP协议 (124)网络应用程序的运行模式 (127).NetFrameWork中的Socket类库 (128)访问网页 (132)一个聊天程序 (132)第一章Windows程序开发简介开发运行在Windows操作系统中的软件需要掌握关于Windows系统下编程的技术,现在业界有多种成熟的Windows开发技术,在本书中,将介绍使用.Net Framework来开发Windows 软件。

那什么是.Net Framework呢?简单的说.Net Framework就是一个C++的类库,专门用来简化Windows程序设计的。

VS2005环境下生成静态lib库及调用方法

VS2005环境下生成静态lib库及调用方法

VS2005环境下生成静态lib库及调用方法生成lib方法:步骤1:新建一个空项目,建一个头文件如Test.h#pragma once#ifdef __cplusplusextern "C" {#endifint GetMin(int a, int b);#ifdef __cplusplus}#endif//其实只要 int GetMin(int a, int b);这么一句语言也会通过,其他的语句仅仅表明一个头文件在很多情况下并不是这么简单的,会有很多的定义步骤2:新建一个源文件如Test.cpp#include "Test.h"int GetMin(int a, int b){return (a < b) ? a : b;}//这里定义一个两者取较小值的函数步骤3:选择配置属性->常规,配置类型选“静态库(.lib)”,确定后再编译,这时会在工程所在文件的debug文件夹下产生一个.lib的静态链接库。

至此,生成工作完成。

调用lib方法:调用方法有两种:第一种:项目设置中引用,在项目的属性中设置。

第二种:在代码中使用 #progma comment(lib,"lib文件名");这里介绍第一种方法。

右键单击项目,有三个地方需要添加lib库的目录和头文件的目录。

步骤一:右键单击项目—>属性—>配置属性—>C/C++—>常规—>附加包含目录在其中填入头文件所在的目录,可以是绝对路径,也可以相对路径(“..”两个点表示上一层目录,“.”一个点表示同级目录,这是相对你工程所在的目录而言的)步骤二:右键单击项目—>属性—>配置属性—>链接器—>常规—>附加库目录在其中填入lib库的目录,也可以是相对或绝对路径。

步骤三:右键单击项目—>属性—>配置属性—>链接器—>输入—>附加依赖项在其中填入lib库的名称,如:Test.lib步骤四:新建一个控制台应用程序进行测试#include "stdafx.h"#include "..\..\Test\Test\Test.h" //注意:这里要include进头文件并且指明路径,或者你可以把头文件直接考到你的工程目录下,并在工程的头文件下把.h文件包含进来,这样只要用 #include “Test.h”就可以#include "iostream"using namespace std;int main(){ int a = 11, b = 12;int c;while(1){c = GetMin(a, b);cout<<c<<endl;}return 0;}。

VS2005创建动态库和调用动态库函数

VS2005创建动态库和调用动态库函数

如何创建动态链接库和调用动态链接库(入门教程)声明:此教程是我初学动态链接库时写的,作为自己的学习笔记,同时也希望能够帮助还在迷惑的初学者。

我的学习资料主要来自于互联网,因此也想把自己的东西分享给大家。

希望共同交流。

如果你已经是高手,请绕开。

开发平台:Windows xp sp3编译环境:VS2005开发语言:C/C++VB版本:VB6.0希望我们共同交流看法,请联系bai_yechuang@陈搏于2012,8,27日废话少说,直接进入正题。

一点击“OK”点击“Next”下面是.cpp和对应的.h文件,先浏览一遍导出DLL库分为2种,一种是用关键字__declspec(dllexport)一种是使用def文件。

1.使用关键字导出DLL编写自己的三个函数//1.求个数的最大数DLLTEST_API int MaxFun(int x,int y){return((x>y)?(x):(y));}//2.求和DLLTEST_API int AddFun(int x,int y){return(x+y);}//3.打印DLLTEST_API void PrintFun(void){std::cout<<"调用动态库函数"<<std::endl; }DLLTEST_API表示此函数导出看看编译结果下面我们写一个控制台程序来调用此函数把dlltest.dll dlltest.lib dlltest.h三个文件考到本地工程目录下面程序如下:结果:只需要将dlltest.dll文件复制到本地工程目录下。

结果:VB界面如下:2个按钮对应2个DLL函数的功能,有一个函数没有参数和返回值在VB中无法使用我们暂且不用。

其遇到的种种错误再此就不多说,直接说正确的调用方法。

如果要想其它平台能够调用VC DLL库,需要在以前的基础上做一些修改。

1.使用def文件的方式导出DLL库之前的dlltest.h就不需要啦。

QTP调用VS2005生成的DLL

QTP调用VS2005生成的DLL

QTP调用VS2005生成的DLL
在VS2005中新建一个C++项目:
假设命名为mydll,在头文件中
然后在源文件中输入以下内容:
按F5进行调试,出现以后提示即表示成功编译,即取消即可。

此时项目目录 X:\ l\mydll\release\mydll.dll 即是我们所需的DLL文件,我复制至F盘并更名为FileName.dll。

然后打开QTP就可以直接调用这个DLL文件了,和调用Win32_API方法类似:
即调用成功。

在VC++中也可以实现,方法类似(摘录):
运行VC6,选择菜单File ---> New,如图
然后OK后进行下一步:
然后在MYDLL里实在一个很简单的函数,返回42:
按F7进行编译。

在QTP中用以下代码即实现调用:
运行后将弹出提示消息42,表示调用成功。

其实这些直接在QTP的帮忙中即有介绍,索引Extern 对象, Declare 方法。

VS2005 vss安装配置使用

VS2005 vss安装配置使用

VS2005 vss安装配置使用2009年11月24日 星期二 14:39服务端安装1.安装Microsoft Visual SourceSafe2005到一台服务器,安装模式选择Full2.运行Microsoft Visual SourceSafe Administration3.建立一个新的数据库,记住数据库所在目录,并将之设置为共享,权限为完全控制4.添加新用户客户端安装5.在本地机器安装Microsoft Visual SourceSafe2005,安装模式可以选择Default6.在本地机器运行Microsoft Visual Source,在出现登录画面时选择服务器上共享目录中的数据库作为本地的数据库7.打开,选择打开要管理的项目文件6.在[文件]菜单中选择[源代码管理],再选择[将选定项目添加到源代码管理器]7.选择要建立的SourceSafe工程文件名称,确定。

在其他机器的打开受控代码1.和客户端一样安装SourceSafe1.打开2.在[文件]菜单中选择[源代码管理],再选择[从源代码管理器打开],选择工程文件新一篇: 配置Microsoft Visual SourceSafe 2005的Internet访问步骤:服务器端://建立vss 数据库1.安装vss 20052.打开vss控制台administration3.新建数据库,任意指定目录,不要求与工程在同一目录下4.将上一步指定的数据库目录设置为共享,并赋予写权限5.在控制台中点击file-》open sourcesafe database——》点击add,一直点下一步,在location中填入\\主机名\数据库名,一路到底6.打开上面建立的数据库,并添加相关用户//关联工程7.打开vs 2005,建立或打开所要控制的工程,右键单击解决方案或工程,选择”将解决方案添加到源代码管理“,登陆到vss数据库,将工程导入到vss中。

使用VS2005搭建三层架构应用程序

使用VS2005搭建三层架构应用程序

2011年第9期福建电脑使用VS2005搭建三层架构应用程序肖纯珊(上海市卢湾区业余大学上海200020)【摘要】:三层架构是目前软件架构设计中最常见也是最经典的一种,它将整个应用程序分为表示层、业务逻辑层和数据访问层。

文章基于三层架构的设计思想,简述了使用VS2005搭建Web应用程序的步骤。

【关键词】:三层架构;VS2005引言在目前的软件架构设计中,出现了许多不同的设计思想,这些设计思想都有着自己的鲜明的特点,可能在解决某一类问题会有较大优势,但要谈到谁是最常用最通用的设计思想非“分层”莫属,而“分层”中最经典的又非“三层”莫属。

图1三层架构示意图三层架构是一种软件架构,三层架构示意图如图1。

从理论上说它并不依赖于某一种开发环境,但作为软件业领头羊的微软公司推荐的软件架构,从某种意义上说已成为一种标准,而且这一标准在其集成开发环境VS2005中得到了最好的支持。

对于刚入门的软件开发者来说,使用VS2005搭建三层架构应用程序成为了最好的选择,本文以一个基于的三层架构Web应用程序为背景简述了整个搭建过程,供读者参考。

1.业务实体库的实现业务实体库由业务实体类组成,实体类是描述应用程序实现的业务所涉及实体的类,即将数据表中的每一个字段定义为属性并使用类封装。

具体实现步骤如下。

(1)新建业务实体库类库项目。

打开VS2005,新建一个类库项目。

(2)在“新建项目”窗口中定义项目名称和解决方案名称。

类库的名称即默认的程序集文件名,解决方案名称可以考虑使用应用程序的名称或公司名称。

(3)添加实体类的类文件。

(4)修改程序集名称和默认命名空间。

程序集名称即类库项目编译后生成的Dll文件的文件名。

默认命名空间在定义时需考虑整个应用程序的一致性和可用性,通常来说,整个应用程序都是在同一命名空间中,为了区分命名空间中不同元素的作用,可以通过添加子命名空间的方式实现,如“Corp.Model”,“Corp”为公司名称,“Model”代表子命名空间主要包含业务实体类。

如何创建自己的DLL

如何创建自己的DLL

如何创建自己的DLL创建自己的DLL(动态链接库)是一项复杂的任务,需要一些编程知识和工具。

下面是一个简单的步骤指南,帮助你开始创建自己的DLL。

1.确定你的需求:首先,你需要确定你的DLL的目的和功能。

这可能包括提供特定的功能或算法、共享代码、提供对外部库或API的封装等等。

2.确定编程语言:选择你熟悉的编程语言来创建DLL。

常见的选择有C、C++、C#等。

不同的语言可能具有不同的工具和技术来创建DLL。

3.设置开发环境:使用适合你选择的编程语言的集成开发环境(IDE)来设置你的开发环境。

这将包括安装和配置编程语言的编译器、调试器和其他必要的工具。

4.创建新的DLL项目:在IDE中创建一个新的DLL项目。

这将基于你选择的编程语言和IDE而有所不同,通常有一个项目模板来简化这个过程。

5.编写DLL代码:在DLL项目中编写需要的代码。

这可能涉及到定义和实现函数、类和数据结构,以及与其他代码进行交互。

6.编译DLL项目:使用IDE中的编译器将DLL项目编译成二进制文件。

这将生成一个DLL文件,该文件包含了你的代码的可执行内容。

7.测试DLL文件:编译DLL之后,你可以创建一个测试应用程序来加载并测试你的DLL文件。

在这个应用程序中,你可以调用DLL中的函数,并检查其行为和输出。

8.部署和使用DLL:一旦你确定你的DLL正常工作,你可以在自己的项目中部署和使用它。

你可以将DLL文件复制到你的项目目录中,并在你的项目代码中加载和调用它。

9.文档和支持:根据需要,你可以编写文档来记录你的DLL的使用方法、功能和限制。

你还可以提供支持和维护的方式,以帮助其他开发者使用你的DLL。

10.更新和维护:根据需求,你可能需要更新和维护你的DLL。

这可能包括修复错误、添加新功能、改进性能等。

创建自己的DLL可能需要更深入的了解编程,并且不同的编程语言和开发环境可能有所不同。

这里提供的步骤只是一个简单的概述,你可能需要根据你的具体情况进行更详细的研究和学习。

VC2005DLL 创建 调试 使用

VC2005DLL 创建 调试 使用

VC2005DLL创建调试使用一、创建DLL选择控制台应用程序工程类型选择DLL 并勾选导出点击完成按钮工程创建完成后,.h文件中包含了需要导出的类、变量、函数的声明.cpp文件中包含了它们的定义。

如果你要添加自己的变量声明或者定义可以添加到它们的后面,.h 文件的末尾写要添加的东西的声明,.cpp文件的末尾写它们的定义。

这是.h文件说明:A部分是宏定义,__declspec(dllexport)被声明成为了一个宏,被__declspec(dllexport)修饰的变量、类、函数,表示这些东西可以在DLL外部使用,类似头文件声明吧!B部分是VC自己定义的类啊、变量啊、函数啊的声明,只是为了给我们举个例子,如果你不需要可以把他们删掉,记得同时把.cpp文件中的定义删掉哦!C部分是我添加的变量声明。

这是.cpp文件说明A部分是DLL入口函数,一般做一些DLL调用时的初始化,卸载DLL时的一些扫尾工作,如果你有需要可以在里面添加相应的代码。

B部分是VC自己的声明的变量啊、函数啊、类啊的声明和构造函数。

如果木有需要可以删掉,同上。

C部分是我在.h中声明的变量的定义。

然后编译链接吧。

如果没问题的话在工程目录下的debug文件夹你会看到你要的dll和文件和一个lib文件二、查看DLL数据1. 编译完DLL工程之后找到vc自带的vcvars32.bat 把它拖入到CMD窗口单击回车2.dumpbin -exports DLL全名就可以查看DLL中所带的函数和数据了PS. dos免输入全文件名诀窍直接把文件拖到DOS窗口即可,双引号不能删掉三、使用DLL里面的东西需要三个步骤:首先,把生成的dll文件lib文件复制到需要使用dll的工程的下面然后,包含DLL中的声明最后,你可以像使用其他的变量、函数、类一样直接使用DLL的东西了。

第一个步骤有两种方法:一个是直接在要使用DLL的文件开头加上声明#pragma comment(lib,”XXX.lib")其中XXX.lib就是上面生成的lib的名字。

VS2005纯资源DLL编写与使用【手把手系列】-名刀-秋水-CSDN博客

VS2005纯资源DLL编写与使用【手把手系列】-名刀-秋水-CSDN博客

VS2005纯资源DLL编写与使用【手把手系列】-名刀-秋水-CSDN博客问题1:纯资源DLL是什么?答:只包含资源(*.rc 、resource.h和主工程Resource Files下面的所有东东)的DLL。

主工程在启动时通过加载这个纯资源DLL来获得所有的资源。

而取代传统方式的资源在主题工程之内的形式,以达到减小主工程的体积(EXE文件大小),并实现模块化与语言国际化。

问题2:上个问题中的*.rc 、resource.h 和主工程Resource Files 下面的所有东东是从哪里来的?答:所有的一切,都来自与主工程,并且在主工程中移除这些文件(不是删除),将其加入到纯资源DLL工程。

提示:建议当主工程的所有代码及其功能已经固定,或基本完成(即将release)时,再开始制作相应的纯资源DLL。

补充说明:更深入的研究纯资源DLL,跟帖就好了,嘻嘻嘻嘻~找一些相关的资料吧,这里做基础的讲解。

开发环境:WINXP\VS2005\CH(中文)主体工程完成后,开始制作纯资源DLL:------------------------------------------------------------------------------------------(1)新建一个win32->DLL项目,选择默认选项创建即可。

(2)一个崭新的基础DLL框架就有了。

(3)将主体工程中的(a)"源文件"下的 *.rc 添加到DLL工程的"源文件"下(b)"头文件"下的 resource.h 添加到DLL工程的"头文件"下(c)"资源文件"下的所有东东添加到DLL工程的"资源文件"下(4)在主体工程中移除上述的文件。

(最好不要删除,以备不时之需!)(5)编译一下DLL工程,理论上是不会出错的,只要你的主体工程没有问题。

动态链接库(dll)和静态库的创建及使用教程

动态链接库(dll)和静态库的创建及使用教程

动态链接库和静态库的创建及使用教程第一部分静态库(以vs2005为例)一、创建新的静态库项目1.从“文件”菜单中,选择“新建”,然后选择“项目…”。

2.从“项目类型”窗格中,选择“Visual C++”下的“Win32”。

3.从“模板”窗格中,选择“Win32 控制台应用程序”。

4.为项目选择一个名称,如“MathFuncsLib”,并将其输入“名称”字段。

为解决方案选择一个名称,如“StaticLibrary”,并将其输入“解决方案名称”字段。

5.按“确定”启动Win32 应用程序向导。

在“Win32 应用程序向导”对话框的“概述”页中,按“下一步”。

6.从“Win32 应用程序向导”的“应用程序设置”页中,选择“应用程序类型”下的“静态库”。

7.从“Win32 应用程序向导”的“应用程序设置”页中,取消选择“附加选项”下的“预编译头”。

8.按“完成”创建项目。

向静态库添加类1.若要为新类创建头文件,请从“项目”菜单中选择“添加新项…”。

将显示“添加新项”对话框。

从“类别”窗格中,选择“Visual C++”下的“代码”。

从“模板”窗格中选择“头文件(.h)”。

为头文件选择一个名称,如“MathFuncsLib.h”,并按“添加”。

将显示一个空白文件。

2.添加一个名为“MyMathFuncs”的简单类,以执行常见的算术运算,如加、减、乘和除。

代码应与以下内容类似:// MathFuncsLib.hnamespace MathFuncs{class MyMathFuncs{public:// Returns a + bstatic double Add(double a, double b);// Returns a - bstatic double Subtract(double a, double b);// Returns a * bstatic double Multiply(double a, double b);// Returns a / b// Throws DivideByZeroException if b is 0static double Divide(double a, double b);};}3.若要为新类创建源文件,请从“项目”菜单中选择“添加新项…”。

VS编写动态链接库DLL(VS2015)

VS编写动态链接库DLL(VS2015)

VS编写动态链接库DLL(VS2015)1、新建win32项⽬,项⽬取名为simpledll(随你⾃⼰取,最好⽤英⽂,不要包含中⽂)2、勾选DLL(d),空项⽬,如下图所⽰点击完成3、添加新建头⽂件4、添加新建源⽂件选择C++⽂件(.cpp),同样取个名字5、在simpledll.h⽂件中添加如下代码:#pragma once;#include<iostream>#ifdef DLL_IMPLEMENT#define DLL_API _declspec(dllexport)#else#define DLL_API _declspec(dllimport)#endifextern"C" DLL_API struct idata* rtu(int d, int e, int f); extern"C" DLL_API int ssd(struct idata* lgd); extern"C" DLL_API int add(int a, int b, int c, struct idata* d);//extern "C"是解决C与C++的兼容问题6、在simpledll.cpp⽂件中添加如下代码:#define DLL_IMPLEMENT#include"simpledll.h"#include<windows.h>#include<intrin.h>#include<stdlib.h>#include<string.h>#include<stdio.h>struct idata{int a;int b;int c;};_declspec(dllexport) extern"C"struct idata* rtu(int d, int e, int f){struct idata edg;struct idata* rng;edg.a = d;edg.b = e;edg.c = f;rng = &edg;return rng;} //初始化结构体数据_declspec(dllexport) extern"C"int ssd(struct idata* lgd){struct idata* rtu(int d, int e, int f);*lgd = *rtu(1, 2, 3);return0;}//赋值结构体数据到另⼀个结构体_declspec(dllexport) extern"C"int add(int a, int b, int c, struct idata* d) {d->a = a;d->b = b;d->c = c;return a+b+c;}//结构体内数据求和7、点击⽣成/⽣成解决⽅案ok 成功下⼀篇介绍如何调⽤该⽣成的DLL。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1VS2005创建DLL使用VS2005创建自己的动态链接库,这样就不用看到DLL文件有抵触情感了。

一、打开VS2005软件,创建DLL工程。

起名ceshi1.1)2)点击下一步,应用程序类型为DLL,空工程。

3)完成,一个新的DLL工程设置完毕,接下来编辑源码添加头文件,命名为ceshi1.h,编辑内容:#ifndef CESHI1_H#define CESHI1_H //防止重复定义#include<iostream> //头文件引用#if defined DLL_EXPORT //源文件需引用下一函数#define DECLDIR__declspec(dllexport)//就是这个#else#define DECLDIR __declspec(dllimport)#endifextern"C"{DECLDIR int add(int a, int b); //函数声明DECLDIR void function(void);}#endif解释:VC中有两种方式导出DLL文件中的函数1)使用 __declspec关键字。

2)创建模板定义文件(Module_Definithion File)即.def文件。

在此使用第一种方法:__declspec(dllexport)作用是导出函数符号到DLL的一个存储类中。

在头文件中定义#define DECLDIR __declspec(dllexport)宏来运行这个函数。

使用条件编译,在源文件中宏定义 #define DLL_EXPORT 来运行这个函数。

//****************************************************************************** 创建源文件 ceshi1.cpp#include<iostream>#define DLL_EXPORT#include"ceshi1.h"extern"C"{//定义Dll中的所有函数DECLDIR int add(int a, int b){return a+b;}DECLDIR void function(void){std::cout<<"DLL called"<<std::endl;}}编译工程,生成ceshi1.dll文件和ceshi1.lib文件(注:找到工程目录,这两个文件在外面的debug文件夹下)。

二、使用创建好的DLL库文件创建一个控制台应用程序1)隐式链接:连接到.lib文件,首先将ceshi1.h头文件,ceshi1.dll动态库文件,ceshi1.lib静态库文件放在控制台应用程序工程的目录中,即源文件所在的文件夹里。

添加源文件ceshi2.cpp,编码:#pragma comment(lib,"ceshi1.lib")//链接.lib文件#include"ceshi1.h"//包含dll的头文件#include<iostream>int main(){function();std::cout<<add(25,25)<<std::endl;getchar();return 0;}//******************************************************************************2)显式链接只加载.dll文件,但需用到函数指针和Windows 函数,不需要.lib文件和.h头文件。

#include<iostream>#include<windows.h>typedef int (*AddFunc)(int, int);typedef void (*FunctionFunc)(void);//函数指针int main(){AddFunc _AddFunc;FunctionFunc _FunctionFunc;//HINSTANCE实例句柄(即一个历程的入口地址)HINSTANCE hInstLibrary = LoadLibraryA("ceshi1.dll");//注意,此时的LoadLibraryA()窄字符集和LoadLibraryW()宽字符集的区别,后有介绍。

if(hInstLibrary == NULL){FreeLibrary(hInstLibrary);//释放DLL获得的内存,若句柄无效}//获得函数的入口地址,还需类型转换_AddFunc = (AddFunc)GetProcAddress(hInstLibrary,"add");_FunctionFunc = (FunctionFunc)GetProcAddress(hInstLibrary,"function");if(_AddFunc==NULL || _FunctionFunc ==NULL)//确定是否成功。

{FreeLibrary(hInstLibrary);}std::cout<<_AddFunc(25,25)<<std::endl;_FunctionFunc();getchar();FreeLibrary(hInstLibrary);return 0;}//****************************************************************************** Windows 的执行文件可以划分为两种形式:程序和动态连接库(DLLs)。

一般程序运行是用.EXE文件,但应用程序有时需要调用存储在DLL 中的函数。

当我们调用Windows 中的API 函数的时候,实际上就是调用存储在DLL 中的函数。

在如下几种情况下,调用DLL 是合理的:1)不同的程序使用相同的DLL ,这样只需要将DLL 在内存中装载一次,节省了内存的开销。

2)当某些内容需要升级的时候,如果使用DLL 只需要改变DLL 就可以了,而不需要把整个程序都进行变动。

3)由于DLL 是独立于语言的,所以,当不同语言习惯的人共同开发一个大型项目的时候,使用DLL 便于程序系统的交流,当然,Delphi开发的DLL 也可以在诸如Visual BASIC,C++ 等系统中使用。

2C语言创建DLL只是要在公开的接口函数声明前面加上几个特定的修饰符。

//**********example1.h*********************************************************** #ifndef EXAMPLE1_H#define EXAMPLE1_H#define DLLIMPORT __declspec(dllexport)DLLIMPORT void HelloWorld(void);#endif//******example1.c*************************************************************** #include"example1.h"#include<windows.h>#include<stdio.h>#include<stdlib.h>DLLIMPORT void HelloWorld(void){MessageBox(0,TEXT("Hello World from DLL!\n"),TEXT("Hi"),MB_ICONINFORMATION); }BOOL APIENTRY DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved){switch(reason){case DLL_PROCESS_ATTACH:break;case DLL_PROCESS_DETACH:break;case DLL_THREAD_ATTACH:break;case DLL_THREAD_DETACH:break;}return true;}__declspec(dllexport)标志着后面这个函数将成为对外的接口,使用包含在DLL中的函数,必须将其导入,导入操作通过dllimport来完成,dllexport和dllimport都是VC和BC所支持的关键字,但不能被自身格式所使用,通用格式为__declspec(dllexport)和__declspec(dllimport),为了简化,用宏名代替,若程序被编译成C++程序,同时希望C程序亦可使用,需要增加”C”的链接说明,#define DLLEXPORT extern “C” __declspec(dllexport),就避免了标准C++命名损坏。

、、有错。

BOOL APIENTRY DllMain()说明:1、每个DLL必须有一个入口点,DllMain()是入口函数,负责初始化(initialization)和结束(termination)工作,每当一个新的进程或该进程的新的线程访问DLL时,或者不再使用DLL时,或结束时,都将调用DllMain。

但是使用terminate Process或terminate Thread结束进程和线程,不会调用DllMain。

DllMain()函数的原型:BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_resong_for_call, LPVOID lpreserved) {switch(ul_reason_for_call){case DLL_PROCESS_ATTACH:…case DLL_THREAD_ATTACH:…case DLL_PROCESS_DETTACH:…case DLL_THREAD_DETTACH:…}return true;}参数:hMoudle:是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段的一个选择符);HINSTANCEul_reason_for_call:是一个说明动态库被调原因的标志。

当进程或线程装入或卸载动态连接库的时候,操作系统调用入口函数,并说明动态连接库被调用的原因。

它所有的可能值为:DLL_PROCESS_ATTACH: 进程被调用;DLL_THREAD_ATTACH: 线程被调用;DLL_PROCESS_DETACH: 进程被停止;DLL_THREAD_DETACH: 线程被停止;lpReserved:是一个被系统所保留的参数。

相关文档
最新文档