动态链接库的导出与导入实例_第1页
动态链接库的导出与导入实例_第2页
动态链接库的导出与导入实例_第3页
动态链接库的导出与导入实例_第4页
动态链接库的导出与导入实例_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、XXXX大学实验报告成绩第 页(共 页)课程:软件开发技术实验日期 年 月 日专业班号XXXX组别交报告日期 年 月 日姓名XXXXXXXXX学号XXXXXXXXX报告退发(修正、重做)同组者教师审批签字实验报告格式一、预习准备:实验目的和要求,实验仪器和设备等;二、实验过程:实验步骤和实验数据记录;三、实验总结:实验数据处理和实验结果讨论。实验名称动态链接库的导出与导入一、实验目的1动态链接库程序设计;2动态链接库应用程序设计;二、实验内容1 导出DLL动态链接库2 导入DLL动态链接库3 函数寻址三、源码: 导出DLL:/DLL.h#ifdef DLL_EXPORTS#define DLL

2、_API _declspec(dllexport) #else#define DLL_API _declspec(dllimport) #endifstruct StuInfochar num15;/学号char name10;/姓名char sex3;/性别char school20;/学院char major_class10;/专业班级StuInfo *next;/下一个学生信息的地址;extern "C" _declspec(dllexport) void Input_Data ( StuInfo * );/输入数据extern "C" _decl

3、spec(dllexport) StuInfo* Num_Search ( StuInfo * );/用学号搜索extern "C" _declspec(dllexport) void Num_Modify ( StuInfo * );/用学号修改extern "C" _declspec(dllexport) void Num_Delete ( StuInfo * );/用学号删除extern "C" _declspec(dllexport) void Print ( StuInfo *p );/显示学生信息extern "

4、C" _declspec(dllexport) int Menu ( );/菜单函数extern "C" _declspec(dllexport) void Class_Search ( StuInfo *head );/用班级搜索/DLL.c#ifndef DLL_EXPORTS#define DLL_EXPORTS#endif#include"DLL.h"#include <windows.h>#include <stdio.h>#include <tchar.h>#include <malloc.

5、h>#include <string.h>static int stu_num = 0;/初始化学生数量为0BOOL APIENTRY DllMain ( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)switch ( ul_reason_for_call )case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;return TRUE;DLL_API void

6、Input_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 );pr

7、intf ( "性别:" );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;

8、stu_num+;/学生数量加一DLL_API StuInfo* Num_Search ( StuInfo *head )/用学号搜索 返回目标节点的前一个节点StuInfo *p, *p_ahead;/p 和 p的前一个节点char search15;p = head;if ( stu_num = 0 )printf ( "没有学生信息n" );return NULL;printf ( "请输入要查找的学号:" );scanf_s ( "%s", search, 15 );while ( p != NULL )/如果找到了直接退出程

9、序 没找到会退出循环 给出提示if ( strcmp ( p->num, search ) = 0 )/如果两个字符串相等printf ( "学 号 姓 名 性 别 学 院 专业班级n" );Print ( p );/输出该信息return p_ahead;/返回前一个p_ahead = p;/保存前一个节点p = p->next;/查找下一个printf ( "没有该学生信息n" );return NULL;DLL_API void Class_Search ( StuInfo *head )/用班级搜索StuInfo *p;char se

10、arch10;int num = 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 (

11、"学 号 姓 名 性 别 学 院 专业班级n" );mark = 1;Print ( p );/输出该信息p = p->next;/查找下一个if ( num = 0 )printf ( "没有找到该班级学生信息n" );return;elseprintf ( "共找到该班级%d名学生信息n", num );return;DLL_API void Num_Modify ( StuInfo *head )/用学号修改StuInfo *p, *head1, *p_ahead;head1 = head;p_ahead = Num_Se

12、arch ( 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 ( "输入

13、性别:" );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_API void Num_Delete ( StuInfo *head )/用学号删除StuInfo *

14、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_API void Print ( StuInfo *p )/显示学生信息printf (

15、 "%s %s %s %s %sn", p->num, p->name, p->sex, p->school, p->major_class );DLL_API int Menu ( )int choose;printf ( " 学生证管理系统 nn" );printf ( " 1.输入数据n" );printf ( " 2.学号查询n" );printf ( " 3.班级查询n" );printf ( " 4.学号修改n" );printf (

16、 " 5.学号删除n" );printf ( " 6.退出系统n" );printf ( "请选择:" );scanf_s ( "%d", &choose, 1 );while ( choose<1 | choose>6 )printf ( "您的选择有误,请重新输入:" );scanf_s ( "%d", &choose, 1 );return choose;将导出的DLL放在导入DLL项目目录下 导入DLL:/DLL_1.h#include &

17、lt;stdio.h>#include <tchar.h>#include<windows.h>#ifdef DLL_EXPORTS#define DLL_API _declspec(dllexport) #else#define DLL_API _declspec(dllimport) #endifstruct StuInfochar num15;/学号char name10;/姓名char sex3;/性别char school20;/学院char major_class10;/专业班级StuInfo *next;/下一个学生信息的地址;/main.h#inc

18、lude"DLL_1.h"typedef void ( *Input_Data ) (StuInfo *);/输入数据typedef StuInfo* (*Num_Search) (StuInfo *);/用学号搜索typedef void ( *Class_Search ) (StuInfo *);/用班级搜索typedef void ( *Num_Modify ) (StuInfo *);/用学号修改typedef void ( *Num_Delete ) (StuInfo *);/用学号删除typedef void ( *Print ) (StuInfo *p);/显

19、示学生信息typedef int ( *Menu ) ();/菜单函数int main ( int argc, char* argv )Input_Data input_data;Num_Search num_search;Class_Search class_search;Num_Modify num_modify;Num_Delete num_delete;Print print;Menu menu;StuInfo *head;/head为头结点 p为尾节点HINSTANCE hinstance;TCHAR path = TEXT ( ".DLL_1.dll" );hi

20、nstance = LoadLibrary ( path );if ( hinstance = NULL )printf ( "dll 未正确加载n" );return 1;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_Sea

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论