XXXX大学实验报告成绩第页(共页)课程:软件开发技术实验日期年月日专业班号XXXX组别交报告日期年月日姓名XXXXXXXXX学号XXXXXXXXX报告退发(修正、重做)同组者教师审批签字实验报告格式一、预习准备:实验目的和要求,实验仪器和设备等;二、实验过程:实验步骤和实验数据记录;三、实验总结:实验数据处理和实验结果讨论。实验名称动态链接库的导出与导入一、实验目的1.动态链接库程序设计;2.动态链接库应用程序设计;二、实验内容1.导出DLL动态链接库2.导入DLL动态链接库3.函数寻址三、源码:①导出DLL://DLL.h#ifdefDLL_EXPORTS#defineDLL_API_declspec(dllexport)#else#defineDLL_API_declspec(dllimport)#endifstructStuInfo{charnum[15];//学号charname[10];//姓名charsex[3];//性别charschool[20];//学院charmajor_class[10];//专业班级StuInfo*next;//下一个学生信息的地址};externC_declspec(dllexport)voidInput_Data(StuInfo*);//输入数据externC_declspec(dllexport)StuInfo*Num_Search(StuInfo*);//用学号搜索externC_declspec(dllexport)voidNum_Modify(StuInfo*);//用学号修改externC_declspec(dllexport)voidNum_Delete(StuInfo*);//用学号删除externC_declspec(dllexport)voidPrint(StuInfo*p);//显示学生信息externC_declspec(dllexport)intMenu();//菜单函数externC_declspec(dllexport)voidClass_Search(StuInfo*head);//用班级搜索//DLL.c#ifndefDLL_EXPORTS#defineDLL_EXPORTS#endif#includeDLL.h#includewindows.h#includestdio.h#includetchar.h#includemalloc.h#includestring.hstaticintstu_num=0;//初始化学生数量为0BOOLAPIENTRYDllMain(HMODULEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){switch(ul_reason_for_call){caseDLL_PROCESS_ATTACH:caseDLL_THREAD_ATTACH:caseDLL_THREAD_DETACH:caseDLL_PROCESS_DETACH:break;}returnTRUE;}DLL_APIvoidInput_Data(StuInfo*head)//输入数据{StuInfo*new_stu;new_stu=(StuInfo*)malloc(sizeof(StuInfo));//申请新的节点空间printf(请输入新的学生信息:\n);printf(学号:);scanf_s(%s,new_stu-num,15);printf(姓名:);scanf_s(%s,new_stu-name,10);printf(性别:);scanf_s(%s,new_stu-sex,3);printf(学院:);scanf_s(%s,new_stu-school,20);printf(专业班级:);scanf_s(%s,new_stu-major_class,10);//头插法建立链表new_stu-next=head-next;head-next=new_stu;stu_num++;//学生数量加一}DLL_APIStuInfo*Num_Search(StuInfo*head)//用学号搜索返回目标节点的前一个节点{StuInfo*p,*p_ahead;//p和p的前一个节点charsearch[15];p=head;if(stu_num==0){printf(没有学生信息\n);returnNULL;}printf(请输入要查找的学号:);scanf_s(%s,search,15);while(p!=NULL)//如果找到了直接退出程序没找到会退出循环给出提示{if(strcmp(p-num,search)==0)//如果两个字符串相等{printf(学号姓名性别学院专业班级\n);Print(p);//输出该信息returnp_ahead;//返回前一个}p_ahead=p;//保存前一个节点p=p-next;//查找下一个}printf(没有该学生信息\n);returnNULL;}DLL_APIvoidClass_Search(StuInfo*head)//用班级搜索{StuInfo*p;charsearch[10];intnum=0,mark=0;p=head;if(stu_num==0){printf(没有学生信息\n);return;}printf(请输入要查找的专业班级:);scanf_s(%s,search,10);while(p!=NULL)//如果找到了直接退出程序没找到会退出循环给出提示{if(strcmp(p-major_class,search)==0)//如果两个字符串相等{num++;if(mark==0){printf(学号姓名性别学院专业班级\n);mark=1;}Print(p);//输出该信息}p=p-next;//查找下一个}if(num==0){printf(没有找到该班级学生信息\n);return;}else{printf(共找到该班级%d名学生信息\n,num);return;}}DLL_APIvoidNum_Modify(StuInfo*head)//用学号修改{StuInfo*p,*head1,*p_ahead;head1=head;p_ahead=Num_Search(head1);//接收目标节点的前一个节点if(p_ahead==NULL){return;}p=p_ahead-next;//目标节点if(p_ahead!=NULL){printf(请重新输入该学生信息:\n);printf(输入学号:);scanf_s(%s,p-num,15);printf(输入姓名:);scanf_s(%s,p-name,10);printf(输入性别:);scanf_s(%s,p-sex,3);printf(输入学院:);scanf_s(%s,p-school,20);printf(输入专业班级:);scanf_s(%s,p-major_class,10);printf(修改成功\n);}return;}DLL_APIvoidNum_Delete(StuInfo*head)//用学号删除{StuInfo*p,*p_ahead,*p_after,*head1;head1=head;p_ahead=Num_Search(head1);//接收目标节点的前一个节点if(p_ahead!=NULL){p=p_ahead-next;p_after=p-next;//目标节点的后一个节点p_ahead-next=p_after;//链接这两个节点free(p);//删除中间的节点printf(删除成功\n);}return;}DLL_APIvoidPrint(StuInfo*p)//显示学生信息{printf(%s%s%s%s%s\n,p-num,p-name,p-sex,p-school,p-major_class);}DLL_APIintMenu(){intchoose;printf(学生证管理系统\n\n);printf(1.输入数据\n);printf(2.学号查询\n);printf(3.班级查询\n);printf(4.学号修改\n);printf(5.学号删除\n);printf(6.退出系统\n);printf(请选择:);scanf_s(%d,&choose,1);while(choose1||choose6){printf(您的选择有误,请重新输入:);scanf_s(%d,&choose,1);}returnchoose;}将导出的DLL放在导入DLL项目目录下②导入DLL://DLL_1.h#includestdio.h#includetchar.h#includewindows.h#ifdefDLL_EXPORTS#defineDLL_API_declspec(dllexport)#else#defineDLL_API_declspec(dllimport)#endifstructStuInfo{charnum[15];//学号charname[10];//姓名charsex[3];//性别charschool[20];//学院charmajor_class[10];//专业班级StuInfo*next;//下一个学生信息的地址};//main.h#includeDLL_1.htypedefvoid(*Input_Data)(StuInfo*);//输入数据typedefStuInfo*(*Num_Search)(StuInfo*);//用学号搜索typedefvoid(*Class_Search)(StuInfo*);//用班级搜索typedefvoid(*Num_Modify)(StuInfo*);//用学号修改typedefvoid(*Num_Delete)(StuInfo*);//用学号删除typedefvoid(*Print)(StuInfo*p);//显示学生信息typedefint(*Menu)();//菜单函数intmain(intargc,char*argv[]){Input_Datainput_data;Num_Searchnum_search;Class_Searchclass_search;Num_Modifynum_modify;Num_Deletenum_delete;Printprint;Menumenu;StuInfo*head;//head为头结点p为尾节点HINSTANCEhinstance;TCHARpath[]=TEXT(.\\DLL_1.dll);hinstance=LoadLibrary(path);if(hinstance==NULL){printf(dll未正确加载\n);return1;}print=(Print)GetProcAddress(hinstance,Print);menu=(Menu)GetProcAddress(hinstance,Menu);input_data=(Input_Data)GetProcAddress(hinstance,Input_Data);num_search=(Num_Search)GetProcAddress(hinstance,Num_Search);class_search=(Class_Search)GetProcAddress(hinstance,Class_Search);num_modify=(Num_Modify)GetProcAddress(hinstance,Num_Modify);num_delete=(Num_Delete)GetProcAddress(hinstance,Num_Delete);if(menu==NULL||input_data==NULL||num_search==NULL||class_search==NUL