设为首页 加入收藏

TOP

用VC++制作DLL经验(一)
2012-11-02 08:52:01 】 浏览:3810
Tags:制作 DLL 经验
    建立一个自己的DLL并在另一个应用程序中成功的调用它之后再阅读'一'、'二'.
   
    ---- DLL可以分为两个不同的类别:用C/C++(www.cppentry.com)(不用对象)编写的基于API的传统DLL
   
    和基于MFC对象的DLL.
   
    一。两种类型的比较:
   
    ---- 1. 基于MFC的DLL限制在使用MFC的编译器中。
   
    ---- 基于API的DLL可以从一种编译器移植到另一种编译器。
   
    ---- 2. 基于MFC的DLL可以由制作向导构建框架,制作简单
   
    ---- 基于API的DLL的制作向导只为你制作了一个空的DLL工程,工程的维护和代码的编写全部需要手工完成(这一点在VC 6.0中有了改进)
   
    ---- 3. 基于MFC的DLL不适用与制作读取二进制文件的DLL
   
    ---- (无法正确读取与DOS应用程序共享的二进制文件)
   
    ---- 基于API的DLL可以正确读取在DOS环境中创建的二进制文件。
   
    ---- 造成该结果的原因其实很简单:
   
    ---- 在读取二进制文件的过程中通常会使用"结构(体)",基于MFC的DLL要加载
   
    MFC,它要求"结构成员位对齐"的比特位是8位,而且你无法方便的通过选中
   
    "Project- >Setting- >C/C++(www.cppentry.com)"选项卡中的"Code Generation"再修改
   
    "Struct member alignment"来使其变为1位(在VC5.0中即使改变了,在编译时该改变也会被忽略。不过这一不足在VC6.0中已经得到了改进,读者有兴趣的话可
        
    ---- 而基于API的DLL则可以通过以上的方法方便的实现。
   
    二。在实际制作与使用中的一点经验:
   
    ---- 1.制作DLL的目的之一是共享资源/代码。所谓"共享"当然不应该仅仅是几个
   
    VC++(www.cppentry.com)制作的应用程序可以使用,但是在与其他编程(www.cppentry.com)语言协作时,有些问题是需要注意的。
   
    ---- 在制作DLL时,VC++(www.cppentry.com)对函数的省缺声明是"__cedcl",也就是说,如果你在声明你的函数时不作特殊声明的话,你制作的DLL将只能被C/C++(www.cppentry.com)调用,如果你想用其他开发语言(比如VB5.0)调用它就会报错,即使调用方法完全正确。
   
    ---- 那么该怎么办呢,你一定已经猜到了---不要用省缺的声明方式---一个很好的选择是使用"WINAPI"来声明你的函数。它可以把你的DLL中的函数声明成WINDOWS API供其他程序调用(当然也包括C/C++(www.cppentry.com)制作的程序)。
   
    ---- 2.建议你在制作DLL的同时制作包括导出函数原型声明的。H文件虽然这不是必须的但是若你的DLL是被C/C++(www.cppentry.com)调用,.H文件和。LIB文件可以为使用你的DLL的开发人员省去不少精力,当你需要修改/升级你的DLL时更是如此。DLL的C/C++(www.cppentry.com)使用者只要在工程中引入。H和。LIB文件可以象使用自己编写的函数一样方便的使用DLL中的函数,不必再使用存储DLL句柄、声明函数型指针、LoadLibrary、
   
    GetProcAddress那样繁复的调用方式。
   
    ---- 3.虽然你不必编写。DEF文件就能制作出基于API的。DLL文件。但是制作。DEF文件并不难,至少你有捷径可以走。有一个很简单的方法你不妨一试:
   
    ---- 例如,你用基于API的方法制作了一个DLL工程文件并为其编写了。CPP和。H文件,你可以保存并关闭该工程,然后在另一个目录中创建一个与其同名的基于MFC的DLL工程。好了,现在你已经知道怎么做了---将该目录中的。DEF文件移动过去就可以了。省下的工作就是再次打开基于API的DLL工程,并将。DEF文件加入工程,将你的导出函数的函数名加到EXPORTS之后,再重新编译工程就OK了。
   
    ---- 4.DLL文件的省缺名称是与工程名一致的(也是在。DEF文件中LIBRARY 之后的名字),不要试图在制作完毕之后通过简单的修改。DLL文件的文件名来改变它,这会导致使用该DLL的应用程序错误。
   

[1] [2] 下一页

首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC动态调用DLL的调试方法 下一篇谈VC++对象模型

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目