VC++怎样生成DLL_第1页
VC++怎样生成DLL_第2页
VC++怎样生成DLL_第3页
VC++怎样生成DLL_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 页无标题笫1页VC+怎样生成DLL(2009-11-2611:16:51)转载标签:yc怎样生成dllit分类:VCVC+怎样生成DLL转在用PowrBuilderJf发应用程序时,经常需要调用动态链接库DLL,本文介绍了动态链接库的基本特点.给出了VC卄建立DLL以及在PowrBuiIder中调川VC+创建的DLL国数的编程实例,实现了通过DLL连接PowrBui】dcr和、C+編制的不同程序的目的。DLL概述:动态链接库(DvnamicLinkLibrary),简称DLL,是基于Window程序设汁的一个非常重要的组成部分。使用DLL有许多优点:(I)使丿IDM的动态连接不是将库代码拷

2、贝.只在程序中记录函数的入I点和接I,在程序执行时才将库代码装入内存.如果有多个里序便用相同的DLL.也只需将DLL在内存中装载一次.节容J内存开销。(2)DLL是基于Wndows的程序模块,它不仅包含可轨行代码,还可以包含数据.各种资源.扩大库文件的檢用范围。(3)对于一个大型的.不断更新的应用程序,可以将许多重复的功能9成DLL.用主程序调用,这样既减少了开发的工作ft,乂提高了访问速度。(4)DLL丰富了PorScriptiK言的编程能力.可以使用PowrScript函数集Z外的函数。例如:川户可能编吗图徐处理系统來浏览文件并将其存放于域据库.该应用需使川浏览器.但川PowrScript

3、W言未提供做这类丁作的函数.为操纵设备,需耍与设备木身环境通信,该环境一般是丿商提供的动态链接库。(5)DLL独立于编程语言,大多数WINDOW编程环境都允许主程序调川DLL中的函数。即可以用VC+xVB.PowerBuilder.Delphi.汇编语言等锂立DLL.然后在不同语冷编制的应用程序中调用它。bill!用个实例说明通过DLL实现PowerBuilder程序和VC+程序Z间的连接。VC+创建DLL在VC+5.0中可以用NFC.AppWzardn动生成Win32DLL和NFC.AppWzardDLL,启动YCZ后.从Fi1eINew菜单项,选择New对话框中的Projects标签,堆择

4、新项目为NFCAppWzard(dll).输入工程名pbdll.点击OK按钮.弹出图11所示对话柜.选择DLL类型为:RegularDLLusingsharedNFCDLL,然后点击Finish按钮。这样,AppWzard将门动创建一个包含基木要索的DLL框架,接着字工添加代码。图11(略)自动生成的XFCAppWzardDLL打开pbdll.cpp文件,添加如下函数:externC_declspec(dl1export)intP.ASCALout_nuni(intx)inty;charmsg30;y=x2;sprintfSetting-0C+”选项匸中的CodeGenerationpj-修改

5、Structnrmberalignnntr來使其变为位(在VC5.0中即使衣变r.在编译酹该改变也会被忽略.不过这一不足在VC6.0中已经得到了改进,读者有翼趣的话可参见笔者在YC6.0中读取二进制文件的惊喜一文).而基于API的DLL则可以通过以上的方法方便的实现.二.在实际制作与使用中的一点经验:1.制作DLL的目的Z是共享资源/代码所谓共享”当然不应该仅仅是儿个VC+制作的应用程序可以便用但是在与其他编程讲言协作时.有些问题是需耍注意的.在制作DLL时.VC+対*函数的省缺声明是Hcedcr也就是说.如果你在声明你的函数时不作特殊声明的话,你制作的DLL将只能被C/C*调用,如果你想用其

6、他开发语言(比如VB5.0)涮用它就会报错.即使调用方法完全正确.那么该怎么办呢你一定已经猜到不耍用省缺的声明方式一个很好的选择是使丿INAPV來声明你的函数它可以把你的DLL中的函数声明成WNDOVSAPI供其他程序调用(当然也包括C/C卄制作的程序).2.建议你在制作DLL的同时制作包括导出函数原型声明的H文件虽然这不是必须的但是若你的DLL是被C/C+调用,H文件和.LIB文件可以为便用你的DLL的开发人员省去不少耕力、|你需要修改/升级你的DLL时更是如此DLL的GC+獅用者只耍在工程中引入.H和.LIB文件可以探便川fl己编吗的函数样方便的使用DLL中的函数.不必再使用存储DLLJ柄

7、、声叨两数型指针、LoadLibraryxGetProcAddress那*丫繁复的凋川方式.3.虽然你不必编弓DEF文件就能制作出基于API的DLL文件但是制作DEF文件并不难至少你有捷径可以走有一个很简单的方法你不妨一试:例如,你用基于API的方法制作了一个DLLX程文件并为其编写T.CPP和.H文件.你可以保存并关闭该工程,然后在另一个目录中创建一个与其同名的基于旺C的DLL丁程.好现在你已经知道怎么做了将该目录中的DEF文件移动过去就可以F.省下的匸作就是再次打开基于API的DLLT程.并将DEF文件加入工程将你的导出函数的国数名加到EXPORTSZ后.再重新編译工程就OKQ4.DLL文

8、件的省缺名称是与工程名一致的(也是在DEF文件中LIBR.ARYZ后的名字),不耍试图在制作完毕Z后通过简的的修改DLL文件的文件名來改变它这会导致使用该DLL的应用程序错误.三一个例子:DLL中定义有两种函数:导出函数(exponfunction):可以被其他模块调用内部函illinternalfunction):只能在DLL内部使川创建一个基于API的DLL.木例只定义了导出函数.1在FILE-NEWPROJECTS中选择”WN32Dynanic-LinkLibrary*在ProjectName中输入5按OK2在FILE-NEWFILES中选择C+SOURCEFILE,在FILE中输入a.

9、cpp.按OK在FILENEWFILES中选择TEXT文件,在FILE中输入a.h,按OK.在FILENEWFILES中选择TEXT文件,在FILE中输入a.def.按OK3源文件:II/a.cpp#includeWNAPIintadd(b)return(a+b);I/a.hWNAPIintadd(b):II/a.defLIBRARY”aaa;指岀DLL的名字DESCRIPTION*aaaWndo耶DvnamicLinkLibrarv;描述DLL的用途(此句可选)EXPORTSadd;导出丙数的名字四调用DLL的方法:1通常我们在训用DLL时所需的DLL文件必须

10、位于以下三个目录2:(1)Wndows的系统目录:windou,ssystenr(2)DOS中闷h所指出的任何目录;(3)程序所在的目录;同时应注怠管理好你的.1ib文件和h和文件2.建立一个工程简单起见可建立一个控制台应用程序.3在工程中引入a.lib:(1)如果你的a.lib放在YC标准的LIB文件夹中.单击Project-ProjectSettings.在Iink选卡的object/librarymodules中加上a.Iib即可(2)如果你的a.lib不是放在VC标准的LIB文件夹中单击Project-AddtoProject-fiIes.找到a.lib文件,按OK4.11/call.

11、a.cpp#include#includeMc:/a/a.hvoldniain(void)intc=0;c=add(1,2);printf(Ml+2=dc);丿/木程序在VC5.0下调试通过创建“通用的”动态链接库(DLLVCKBASE最近右许多人问如何让动态f连接库的输出函数能够被任何支持动态链接库的语言调用。养动态链接库是很EASY的事情。但是他们大多觉得输出的名字有乱字符(如:,bShifiRigMl)。我想在这里就讨论一下如何让输出函数的名字中不出现乱子符。首先,除非你绝对需要使用C+编码,否则我还是推荐便用C來吗DLL。这里我想让创建的DLL可以在VB中便用。你需要实现自己DLL的入

12、口点函数和保证代码使用stdcal1调用规范.但这要依赖你使用的编译器。例如.你可以在VC中使用Gentry:DLLEntry命令行编译选项來创建己的入口点。DLLEntry可以参考下列代码:IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHIIIIIIIIIIIIIIIIIIII11DLLinitializationandcleanup.BOOLWNAPIDllNfcin(HINSTANCEhinstDLLDWORDfdwReason,LPVOID1pvReserved)switch(fdwReason)caseDLL_PROCESS_ATTAC

13、H:11PerformanyDLLinitializationherebreak:caseDLL.PROCESS.DETACH:11PerformanyDLLcleanupherebreak:returnTRUE;为了保证你使用正确的调用规范,要通知编译器使用stdcall规范和/或便用在window,h(及相关文件)中定义的常量,如WNAP1等。通常DLL的代码如下:11Shiftsbitsrightforintegers.WRDWNAPIvbShiftRight(W)RDnValue,WORDnBitsreturn(nValuenBits);下一步是与你在微软文档中读到的内容相反。你需耍创建一个DEF文件。这是你防止输出函数名不出现乱字符的唯一方式(如.vbShiftRight)oDEF文件的形式如下:EXPORTSvbShiftRight下一步是在VB中调用这个函数,使用以下声明:CteclareFundionvbShiftRightLibMVDLL.DLLIByVainValue.AsInteger,ByVainBitsAsInteger)AsIntegerSubTest()DimiAsIntegeri=vbShiftRight(4.2)Debug.Assert!=1EndSub如果你还想要更容易的方法从VB中训用,可以创建一个类型库。为此你需要创建和編译ODL(对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论