vs创建和使用动态链接库dll.docx

上传人:b****4 文档编号:11585157 上传时间:2023-03-19 格式:DOCX 页数:4 大小:16.86KB
下载 相关 举报
vs创建和使用动态链接库dll.docx_第1页
第1页 / 共4页
vs创建和使用动态链接库dll.docx_第2页
第2页 / 共4页
vs创建和使用动态链接库dll.docx_第3页
第3页 / 共4页
vs创建和使用动态链接库dll.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

vs创建和使用动态链接库dll.docx

《vs创建和使用动态链接库dll.docx》由会员分享,可在线阅读,更多相关《vs创建和使用动态链接库dll.docx(4页珍藏版)》请在冰豆网上搜索。

vs创建和使用动态链接库dll.docx

vs创建和使用动态链接库dll

vs2010创建和使用动态链接库(dll)

1、打开MicrosoftVisualStudio2010,选择File->New->Project。

2、在NewProject中选择InstalledTemplates->VisualC++->Win32。

3、选择Win32ConsoleApplication,设置名称:

simpledll,设置解决方案名:

zdddll。

4、单击OK,在出现的Win32ApplicationWizard的Overview对话框中点击Next。

5、在ApplicationSettings中,选择Applicationtype下的DLL。

6、勾选Additionaloptions下的Emptyproject。

7、单击Finish创建项目。

向动态链接库添加类:

1、添加新类头文件。

右键单击simpledll项目,Add->NewItem,选择HeaderFile(.h),设置名称为simpledll,单击Add。

2、添加新类源文件。

右键单击simpledll项目,Add->NewItem,选择C++File(.cpp),设置名称为simpledll,单击Add。

3、为新类添加内容。

内容如下:

头文件simpledll.h:

[html]viewplaincopyprint?

//------------------simpledll.h----------------#pragmaonce;//该宏完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入//宏DLL_IMPLEMENT在simpledll.cpp中定义#ifdefDLL_IMPLEMENT#defineDLL_API__declspec(dllexport)#else#defineDLL_API__declspec(dllimport)#endifnamespacezdd{//导出类classDLL_APISimpleDll{public:

SimpleDll();~SimpleDll();intadd(intx,inty);//简单方法};}

源文件simpledll.cpp:

 

[cpp]viewplaincopyprint?

//------------------simpledll.cpp----------------//注意此处的宏定义需要写在#include"simpledll.h"之前//以完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入#defineDLL_IMPLEMENT#include"simpledll.h"namespacezdd{SimpleDll:

:

SimpleDll(){}SimpleDll:

:

~SimpleDll(){}intSimpleDll:

:

add(intx,inty){returnx+y;}}4、完成后点击Build->BuildSolution,生成解决方案。

可在~zdddll\Debug下查看生成的simpledll.lib和simpledll.dll.文件。

创建引用动态链接库的应用程序:

1、选择File->New->Project。

2、在NewProject中选择InstalledTemplates->VisualC++->Win32。

3、选择Win32ConsoleApplication,设置名称:

usesimpledll。

选择Addtosolution。

4、单击OK,在出现的Win32ApplicationWizard的Overview对话框中点击Next。

5、在ApplicationSettings中,选择Applicationtype下的Consoleapplication。

6、取消Additionaloptions下的Precompiledheader,勾选Emptyproject。

7、单击Finish创建项目。

在控制台应用程序中使用类库的功能:

1、为控制台应用程序添加main.cpp。

右键单击usesimpledll项目,Add->NewItem,选择C++File(.cpp),设置名称为main,单击Add。

2、为main.cpp添加内容。

如下所示:

[cpp]viewplaincopyprint?

//------------------main.cpp-------------------#include"simpledll.h"usingnamespacezdd;#include<iostream>usingnamespacestd;intmain(charargc,char**argv){//cout<<"----------------------"<<endl;SimpleDllsd;cout<<"sd.add:

3+5="<<sd.add(3,5)<<endl;cout<<"sd.getConst():

"<<sd.getConst()<<endl;SimpleDll*psd=newSimpleDll;cout<<"psd->add:

5+5="<<psd->add(5,5)<<endl;cout<<"psd->getConst():

"<<endl;cout<<"----------------------"<<endl;cout<<"pleasepressEnterexit."<<endl;getchar();return0;}

3、引用simpledll项目。

右键单击usesimpledll项目,选择Properties->CommonProperties->FrameworkandReferences。

点击AddNewReference,选择simpledll项目,单击OK。

4、设置头文件路径。

选择Properties->ConfigurationProperties->VC++Directories。

在IncludeDirectories项添加$(SolutionDir)\simpledll\,选择应用,确定。

5、设置usesimpledll项目为活动项目。

右键单击usesimpledll项目,选择SetupStartUpProject。

6、生成解决方案。

Debug运行结果如下:

[cpp]viewplaincopyprint?

3+5=85+5=10

更丰富的simpledll类和相关问题:

simpledll.h文件:

[cpp]viewplaincopyprint?

//------------------simpledll.h----------------#pragmaonce;//该宏完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入//宏DLL_IMPLEMENT在simpledll.cpp中定义#ifdefDLL_IMPLEMENT#defineDLL_API__declspec(dllexport)#else#defineDLL_API__declspec(dllimport)#endifnamespacezdd{//导出类classDLL_APISimpleDll{public:

SimpleDll();~SimpleDll();intadd(intx,inty);//简单方法staticintsub(intx,inty);//静态方法intgetConst();//intgetNum();private:

voidsetNum(intn);intnum;};//全局变量intDLL_APInumber;SimpleDllDLL_APIsdd;//对于指针,下面两种用法没区别?

SimpleDllDLL_API*psdd;SimpleDll*psdd1;//方法intDLL_APIAdd(inta,intb);SimpleDll*createClass(){returnnewSimpleDll;}/*//问题1:

若这样使用,则出现如下错误:

//errorC2059:

syntaxerror:

'__declspec(dllexport)'//errorC2143:

syntaxerror:

missing';'before'{'//error:

'__declspec(dllimport)'//errorC2143:

syntaxerror:

missing';'before'{'//errorC2447:

'{':

missingfunctionheader(old-styleformallist?

)//为什么?

SimpleDll*DLL_APIcreateClass1(){returnnewSimpleDll;}*//*//问题2:

若这样使用,则出现如下错误:

//Error1errorC2491:

'zdd:

:

createClass1':

definitionofdllimportfunctionnotallowedusesimpledll//为什么?

SimpleDllDLL_API*createClass2(){returnnewSimpleDll;}*///问题3:

这样使用(实现在.cpp中),编译没有问题。

//但在main中应用时回出现以下错误:

//errorLNK2019:

unresolvedexternalsymbol"classzdd:

:

SimpleDll*__cdeclzdd:

:

createClass3(void)"(?

createClass3@zdd@@YAPAVSimpleDll@1@XZ)referencedinfunction_main//该如何解决?

SimpleDll*createClass3();//先别这样用//全局方法加DLL_API和不加DLL_API时的区别intDLL_APIgetConst1();//intgetConst2();//不要这样使用//也不要这样用//否则当程序发布之后,如果只想通过更新.dll//来达到更新程序数据的目的,比如将此处的100更新成10.//通过下面的方法你是做不到的intgetConst2(){return100;//return10;}//也不要这样用,否则将出现如下错误//errorC2491:

'zdd:

:

getConst3':

definitionofdllimportfunctionnotallowed/*intDLL_APIgetConst3(){return100;}*///不要这样用,同理intothers(inta){returna+10;}}

simpledll.cpp文件:

 

[cpp]viewplaincopyprint?

//------------------simpledll.cpp----------------//注意此处的宏定义需要写在#include"simpledll.h"之前//以完成在dll项目内部使用__declspec(dllexport)导出//在dll项目外部使用时,用__declspec(dllimport)导入#defineDLL_IMPLEMENT#include"simpledll.h"namespacezdd{SimpleDll:

:

SimpleDll(){}SimpleDll:

:

~SimpleDll(){}intSimpleDll:

:

add(intx,inty){returnx+y;}intSimpleDll:

:

sub(intx,inty){returnx-y;}intSimpleDll:

:

getConst(){return10;//}voidSimpleDll:

:

setNum(intn){num=n;}intSimpleDll:

:

getNum(){returnnum;}externintnumber=5;intAdd(inta,intb){returna+b;}SimpleDll*createClass3(){returnnewSimpleDll;}intgetConst1(){return100;//return10;}/*//errorexternintgetConst2(){return100;}*/}

main.cpp文件:

 

[cpp]viewplaincopyprint?

//------------------main.cpp-------------------#include"simpledll.h"usingnamespacezdd;#include<iostream>usingnamespacestd;intmain(charargc,char**argv){//cout<<"----------------------"<<endl;SimpleDllsd;cout<<"sd.add:

3+5="<<sd.add(3,5)<<endl;cout<<"sd.getConst():

"<<sd.getConst()<<endl;SimpleDll*psd=newSimpleDll;cout<<"psd->add:

5+5="<<psd->add(5,5)<<endl;cout<<"psd->getConst():

"<<endl;cout<<"----------------------"<<endl;cout<<"SimpleDll:

:

sub:

2-1="<<SimpleDll:

:

sub(2,1)<<endl;cout<<"----------------------"<<endl;cout<<"zdd:

:

number:

"<<number<<endl;number=10;cout<<"changedzdd:

:

number:

"<<number<<endl;cout<<"----------------------"<<endl;cout<<"sdd.add:

6+8="<<sdd.add(6,8)<<endl;cout<<"psdd->add:

6+8="<<psdd->add(6,8)<<endl;cout<<"psdd1->add:

6+8="<<psdd1->add(6,8)<<endl;cout<<endl;cout<<"sdd.getConst():

"<<sd.getConst()<<endl;cout<<"psdd.getConst():

"<<psdd->getConst()<<endl;cout<<"psdd1.getConst():

"<<psdd1->getConst()<<endl;cout<<"----------------------"<<endl;cout<<"zdd:

:

Add:

7+8="<<Add(7,8)<<endl;cout<<"----------------------"<<endl;SimpleDll*p=createClass();cout<<"create->add:

2+3="<<p->add(3,2)<<endl;cout<<"create->getConst():

"<<p->getConst()<<endl;cout<<"----------------------"<<endl;//SimpleDll*p3=createClass3();//cout<<"create3->add:

2+3="<<p3->add(3,2)<<endl;//cout<<"create3->getConst():

"<<p3->getConst()<<endl;//cout<<"----------------------"<<endl;cout<<"----------------------"<<endl;//请别在你的应用程序中使用getConst2cout<<"DLL_APIgetConst1:

"<<getConst1()<<endl;cout<<"getConst2:

"<<getConst2()<<endl;//cout<<"DLL_APIgetConst3:

"<<getConst3()<<endl;cout<<"----------------------"<<endl;//cout<<"others:

"<<others(6)<<endl;//cout<<"others:

"<<others(16)<<endl;//cout<<"----------------------"<<endl;cout<<"pleasepressEnterexit."<<endl;getchar();return0;}

运行结果为:

[html]viewplaincopyprint?

----------------------sd.add:

3+5=8sd.getConst():

10psd->add:

5+5=10psd->getConst():

----------------------SimpleDll:

:

sub:

2-1=1----------------------zdd:

:

number:

5changedzdd:

:

number:

10----------------------sdd.add:

6+8=14psdd->add:

6+8=14psdd1->add:

6+8=14sdd.getConst():

10psdd.getConst():

10psdd1.getConst():

10----------------------zdd:

:

Add:

7+8=15----------------------create->add:

2+3=5create->getConst():

10--------------------------------------------DLL_APIgetConst1:

100getConst2:

100----------------------pleasepressEnterexit.

可将生成的可执行文件和应用程序拷出到同一目录下,通过更改方法getConst1,getConst2,体会dllexport和dllimport的作用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 机械仪表

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1