相关服务

  • 《应用科技》2006年第5期摘录:第5期王桂如,等:VC++中动

如发现有乱码,请点击下面链接浏览原文
正文摘录:

第5期王桂如,等:VC++中动态和静态连接库的实现·39·可以使用一declspec:(dllexport)关键字从DLL中输出函数、数据、类或是类成员,使用该关键字就不再使用【)EF’文件.当要从DLL中输出函数时,一declspec-(dllex.port)关键字必须放置在输出变量的前面,当建立一个新的DLL文件时,一般会创建一个包含输出函数原形或函数类的头文件,然后在头文件中加上一declspet:(dllexpoll)关键字声明.在使用上述的DLL的输出函数时,就可以利用~declspec(dllexport)关键字来声明使用的DLL输出函数,然后可以直接使用这些函数.3)针对MFc扩展函数,它使用AFx—EXT—cLASS宏来导出类.MF(:扩展DLL使用AFX—EXT—cIASS宏输出类,而使用扩展DIJJ的应用程序也使用该宏输人类.4VC中DLL的建立和使用4.1VC中DLL的类型Vc中可以建立2种类型的DLL,一是win32DLL,它不使用MFc类库;二是MFcDLL,它又分为常规的DLL和扩展DLL_常规DLL使用MFc静态库或MFC共享动态库,其函数输出头使用标准的C界面,输出函数可以被MFC或是非MFc的应用程序调用.扩展DLL是从现有的MFc类中派生出新的可用类的DLL,它在建立时使用MFC的共享DLL,其导出函数只能被使用共享MFCDLL的应用(MFC程序或常规的DLL)调用,使用扩展的DLL可以从MFC继承新类,然后提供该类给使用扩展DLL的应用程序.例如,要在VC中创建一个动态连接库,选择File—New菜单,弹出.New对话框.在Proiects标签页下,选择“Win32Dynamk:一【,inkLibrar—v”.v:isualc++就会创建动态连接库所需的工程文件和MAK文件.4.2VC中DLL的连接一般的应用程序使用DLL的方法有2种,一种是隐式连接,一种是显式连接.隐式连接调用时,应用程序工程中应该包含建立DLL时生成的库:*。.LlB文件,当应用程序调用DLL中的资源时,操作系统将装载DLL,应用就像调用自己的函数一样调用DLL中的函数;显式连接调用时,应用程序必须显式装载DLL,然后使用以函数指针的形式使用DLL中的输出函数,最后显式卸载DLL.具体的做法是,隐式连接调用时,在应用程序的正确位置声明DLL的函数,工程中还要包含DLL的输人库uB文件.显式连接调用时,应用程序必须调用系统函数来使用DLL,先要用L0adLibral了装载DLL,并取得模块的句柄,还要用GetProcAddress函数取得DLL中的输出函数的地址指针,最后调用Freel。.ibral了函数释放DLL及其资源,并且调用时最好在包含xx.exe的目录下包含要使用的xx.dlI.因为Windows将遵循下面的搜索顺序来定位DLL:1)包含EXE文件的目录;2)进程的当前工作目录;3)w.indows系统目录;4)Windows目录;5)列在Path环境变量中的一系列目录.5结束语设计程序实现了Vc++6.0中基于MFc共享动态库的常规DLL,DLL中的导出函数用来寻找PcI总线上的cAN卡控制器,在Vc++6.0的应用程序中隐式的调用了它,并在VB中用DeclareFunction函数声明了之后调用它,从而实现了VC和VB中CAN卡的驱动.参考文献:[1]陈元琰.VisuaJc++6.0编程使用技术与案例[M].北京:清华大学出版社,2002.[2]DAVIDJK.VisualC++技术内幕:第4版[M].潘爱民,译.北京:清华大学出版社,1999.[3]李明柱.Visualc++最新编程实践与技巧[M].北京:北京航空航天大学出版社,2000.[4]王文学.Visualc++6.0宝典[M].北京:电子工业出版社.2000.[责任编辑:马兰兰]

阅读此文(图):   点击此处在线翻阅