接口中VC中连接库的生成与调用

接口中VC中连接库的生成与调用

ID:39496774

大小:134.50 KB

页数:8页

时间:2019-07-04

接口中VC中连接库的生成与调用_第1页
接口中VC中连接库的生成与调用_第2页
接口中VC中连接库的生成与调用_第3页
接口中VC中连接库的生成与调用_第4页
接口中VC中连接库的生成与调用_第5页
资源描述:

《接口中VC中连接库的生成与调用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第四节VC中连接库的生成与调用以上有关服务的调用过程比较复杂,涉及到的概念也比较多,很容易造成混乱和差错。在实用中,我们完全可以将这部分代码封装起来直接调用,使得程序简单明了。在VC中,这样的封装方法有多种,静态库和动态库是常用的在设备驱动函数调用的方式。许多硬件接口板提供的程序接口就是这样的一些函数调用。6.4.1静态库的生成与调用Win32静态库是指在程序执行之前,库函数的代码就已经链接到生成的可执行文件中,无论是否被调用都随程序的执行被加载到内存中。1.库文件的生成在VC中,可以生成Win32静态库Lib文件,其中的函数可以供其它程序调用。在建立库文件项目时在项目向导中必须

2、选择生成Win32静态库的程序选项,见下图:在171源程序中,库程序的结构与普通程序有点差异,需要在程序开头加以说明外部调用的函数及其格式,在所有源文件中也没有主函数。例如说明OnOpenService函数为:extern"C"voidOnOpenService();即声明OnOpenService函数为C编译、连接方式的外部函数。在函数的实现过程中与普通函数没有差异,但是为了通用,MFC的函数调用不要使用。使用Build命令即可以生成库文件的二进制代码(.lib文件)供其它程序调用了。下面是采用静态库的方法,将前面的打开服务和删除服务的函数封装为两个库函数,供应用程序调用,这样

3、在应用程序中就可以完全屏蔽了有关系统服务的细节。在构造静态库函数时,必须注意仅使用基本C的部分,否则在调用时回产生错误。所以在下面的函数中,将CString的使用和AfxMessageBox()对话框的调用都去除了。//svrlib.cpp#include#include"winsvc.h"extern"C"voidOnOpenService();extern"C"voidOnRemoveService();voidOnRemoveService(){//openservicemanagerSC_HANDLEsvm=OpenSCManager(NULL,NU

4、LL,SC_MANAGER_ALL_ACCESS);if(svm==NULL){//AfxMessageBox("Cannotopenservicemanager");return;}//openthespecifiedserviceSC_HANDLEsvc=OpenService(svm,"SppIO",SERVICE_ALL_ACCESS);if(svc==NULL){//AfxMessageBox("SppIOisnotinstalledorcannotbefound");return;}//getbinarypathnameQUERY_SERVICE_CONFIG*pQS

5、C;DWORDdwActual;171BOOLbRet=QueryServiceConfig(svc,NULL,0,&dwActual);pQSC=(QUERY_SERVICE_CONFIG*)newBYTE[dwActual];QueryServiceConfig(svc,pQSC,dwActual,&dwActual);//CStringstrFile=pQSC->lpBinaryPathName;deletepQSC;//strFile=strFile.Right(strFile.GetLength()-4);SERVICE_STATUSss;bRet=ControlSer

6、vice(svc,SERVICE_CONTROL_STOP,&ss);if(bRet==FALSE){//AfxMessageBox("Cannotstopservice/alreadystopped");return;}bRet=DeleteService(svc);if(bRet==FALSE){//AfxMessageBox("Cannotdeleteservice");bRet=CloseServiceHandle(svc);}bRet=CloseServiceHandle(svc);if(bRet==FALSE){//AfxMessageBox("Cannotclose

7、service");return;}else{//AfxMessageBox("SppIOsuccessfullydeleted");return;}}voidOnOpenService(){SC_HANDLEscm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);if(scm==NULL){//AfxMessageBox("errorinOpenSCManager");return;}SC_HANDLEsvc=CreateServi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。