b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

如何生成DLL文件(2)

电脑杂谈  发布时间:2020-05-19 22:03:40  来源:网络整理

对于隐式链接,非零值;对于显式链接,非零值. 在MFC下创建一个DLL文件,它将自动生成一个def文件框架,另一个与传统的Non-MFC DLL没什么不同,只要将关键字_declspec(dllexport)函数类型和函数名称写在相应的头文件中,或在生成的def文件的EXPORTS下输入函数名称. 应当注意,在将MFC扩展DLL分发给其他开发人员时,请不要忘记提供描述DLL中的类的头文件以及相应的.LIB文件和DLL本身,之后开发人员可以充分利用您开发的扩展DLL. 4.动态链接库DLL的链接应用程序可以两种方式使用DLL: 一种是隐式链接,另一种是显式链接. 在使用DLL之前,我们必须首先了解DLL中功能的结构信息. Visual C ++ 6.0在VC \ bin目录中提供了一个名为Dumpbin.exe的小程序,该程序可用于查看DLL文件中的函数结构. 此外,Windows系统将按照以下搜索顺序找到DLL: 1.包含EXE文件的目录,2.进程的当前工作目录,3. Windows系统目录,4. Windows目录,5. A路径环境变量中列出的一系列目录.

1. 隐式链接隐式链接是在程序开始执行时,将DLL文件加载到应用程序中. 隐式链接很容易实现,只需将导入功能关键字_declspec(dllimport)函数名称等写入应用程序的相应头文件中. 下面的示例通过隐式链接调用MyDll.dll库中的Min函数. 首先生成一个项目作为TestDll,在DllTest.h和DllTest.cpp文件中输入以下代码: //Dlltest.h #pragma注释(lib,“ MyDll.lib”)extern“ C” _declspec(dllimport)int Max( int a怎么写dll文件,int b); extern“ C” _declspec(dllimport)int Min(int a,int b); //TestDll.cpp #include #include“ Dlltest.h” void main(){int a; a = min(8,10)printf(“比较结果为%d \ n”,a);} //注意,如果程序中发生连接错误,请将lib文件添加到项目中. 创建DllTest.exe文件之前,必须首先将MyDll.dll和MyDll.lib复制到当前项目所在的目录或Windows的System目录中.

如果DLL使用def文件,请在TestDll.h文件中删除关键字extern“ C”. 链接时,TestDll.h文件中的关键字Progam commit是将Visual C +编译器链接到MyDll.lib文件. 当然,开发人员也不能使用#pragma注释(lib,“ MyDll.lib”)语句,而只需在项目的“设置”->“链接”页面的“对象/模块”列中输入MyDll.lib. 2.显式链接显式链接意味着应用程序可以在执行过程中随时加载DLL文件,也可以随时卸载DLL文件. 这对于隐式链接是不可能的,因此显式链接具有更好的灵活性. 性语言更合适. 但是,实现显式链接更加麻烦. 在应用程序中,使用MFC提供的LoadLibrary或AfxLoadLibrary显式调用您创建的动态链接库. 动态链接库的文件名是上述两个函数的参数,然后使用GetProcAddress()获得所需的函数. 从那时起,您可以像在应用程序中将其作为自定义函数一样调用此导入的函数.

在应用程序退出之前,应使用MFC提供的FreeLibrary或AfxFreeLibrary释放动态链接库. 下面是通过显式链接在DLL中调用Max函数的示例. #include #include void main(void){typedef int(* pMax)(int a,int b); typedef int(* pMin)(int a,int b); HINSTANCE hDLL; PMax Max HDLL = LoadLibrary(“ MyDll. dll”); //加载动态链接库MyDll.dll文件;最大=(pMax)GetProcAddress(hDLL,“最大”); A =最大值(5,8); Printf(“比较结果为%d \ n”,A); FreeLibrary(hDLL); //卸载MyDll.dll文件;}在上面的示例中,使用类型定义关键字typedef,定义指向与DLL中相同的函数原型的指针,然后通过LoadLibray()将DLL加载到当前函数中,返回当前DLL文件的句柄,然后获取通过GetProcAddress()函数导入到应用程序中的函数指针. 调用该函数后,使用FreeLibrary()卸载DLL文件.

在编译程序之前,首先将DLL文件复制到项目所在的目录或Windows系统目录中. 使用显式链接应用程序进行编译不需要相应的Lib文件. 此外,使用GetProcAddress()函数时,可以使用MAKEINTRESOURCE()函数直接使用DLL中函数的序列号,例如将GetProcAddress(hDLL,“ Min”)更改为GetProcAddress(hDLL,MAKEINTRESOURCE( 2))(函数Min()DLL中的序列号为2),因此在DLL中调用该函数的速度很快,但请记住使用该函数的序列号,否则会发生错误. 本文以易于理解的方式全面介绍了动态链接库的概念,动态链接库的创建和动态链接库的链接,并给出了一个简单明了的示例. 我相信读者可以在阅读本文链接库并将其应用于后续软件开发后,创建自己的动态对象. 当然,读者需要精通DLL操作,并且需要在许多实践中继续探索. 我希望本文能有所作为.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-215786-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    每日福利
    热点图片
    拼命载入中...