DLL制作和调用

    科技2022-08-04  111

    DLL制作和调用

    一、DLL简介 DLL,即动态链接库,它允许程序共享执行特殊任务所必需的代码和其他资源,是一种中间件。 使用DLL优点有如下几个方面: (1)多个应用程序共享代码和数据。 (2)节省内存和减少交换操作。 (3)支持多语言程序。 (4)在钩子程序过滤系统消息时必须使用DLL。 (5)DLL以一种自然的方式将一个大的应用程序划分为几个小的模块,有利于小组内部成员的分工与合作。而且,各个模块可以独立升级。 (6)实现应用程序的国际化。

    二、 用VS做一个DLL文件 1、打开Visual Studio 2019(当然也可以选择其他版本),点击“创建新项目(N)”,如下图所示。 2、选择“类库(.NET Standard)”,就可以制作DLL文件。点击“下一步(N)”,如下图所示。 3、配置新项目。我这里的项目名称是“ShiYan15”,位置可自行设置,点击“创建(C)”,如下图所示。 4、写一个最简单的函数,它的返回类型是string型,随便给一个参数,比如aaa,它的返回值是“学号+姓名”。这样,DLL的制作就完成了。 5、选择“生成(B)”,点击“生成解决方案(B)”,再去所对应的文件夹里,发现生成了ShiYan15.dll文件,如下图所示。 6、下面的问题是如何去调用它。需要再新建一个项目,选择“Windows窗体应用”,点击“下一步(N)”,如下图所示。 7、配置新项目。项目名称可以用默认的,位置可自行设置,点击“创建(C)”,如下图所示。 8、在“工具箱”里拖动一个“Button”,添加Button按钮,更改其属性,比如重命名为“调用DLL”,如下图所示。 9、选择“生成(B)”,点击“生成解决方案(B)”,再去所对应的文件夹里,发现生成了后缀名是“.exe”的文件,如下图所示。 10、生成之后就是调用。要将dll文件调用到应用程序中来。采取的办法是:点击“项目(P)| 添加引用(R)…”,点击“浏览”,找到刚才的“ShiYan15.dll”文件,点击“添加”。如下图所示。 11、接下来就是通过代码来添加,用MessageBox调用输出。具体如下图所示。 12、点击“启动”,点击“调用DLL”,就会弹出内容,这样,本实验也就实现了DLL的制作和调用。如下图所示。 三、用VB做一个DLL文件

    1、打开VB6.0会出现如图所示的对话框,选择“ActiveX DLL”选项,然后单击对话框上的“打开”按钮。 2、进入主界面后,把工程名从默认的“工程1”改为“MyFirstDLL”;把类名从默认的“Class1”改为“CMath”。如下图所示。 3、开始写一个加法函数,如下图所示。 4、单击“文件”菜单,然后选择“MyFirstDLL.DLL”命令,把新生成的MyFirstDLL.DLL保存到相应的目录下。如下图所示。 对ActiveX DLL的测试

    (一)在VB上的测试 1、打开VB6.0,在出现如下图所示的对话框时,选择“标准EXE”,然后单击“打开”按钮。在“工程”菜单里选择“引用”命令,然后在弹出的对话框中选择“浏览”选项,把刚生成的MyFirstDLL.DLL引用进来,单击“确定”按钮完成引用后就可以使用MyFirstDLL.DLL里面的CMath类了。 2、在主界面上拖一个“按钮”,在这个“按钮”的单击事件里写如下的测试代码: (1)静态引用。

    Private Sub Command1_Click() '静态引用 Dim math As CMath Set math = New CMath MsgBox math.Add(10, 11) End Sub

    (2)动态引用

    Private Sub Command1_Click() '动态引用 Dim obj As Object Set obj = CreateObject("myfirstdll.cmath") MsgBox obj.Add(10, 11) End Sub

    3、运行测试程序,点击上面的按钮时,就会弹出一个提示框,显示的是程序运行的结果,如下图所示。 (二)在VC上的测试 1、为了确保MyFirstDLL.DLL是已注册的控件,运行:regsvr32对这个ActiveX DLL进行注册,即使注册过了,再注册也没什么负面影响。 注册成功后的截图如下图所示。 2、打开VC6.0,建立一个MFC对话框工程,如下图所示。 3、在stdafx.h中加上对MyFirstDLL.DLL的导入,并引用这个命名空间MyFirstDLL,代码如下: #import “G:\高级软件工程(实验篇)\第15章 DLL制作和调用\用VB做DLL文件\MyFirstDLL.dll” using namespace MyFirstDLL; 如下图所示。 4、双击“确定”按钮,重载“确定”按钮的响应函数,其代码如下:

    void CVCDlg::OnOK() { // TODO: Add extra validation here HRESULT hResult; CLSID clsid; ::CoInitialize(NULL); hResult = CLSIDFromProgID(OLESTR("MyFirstDLL.CMath"),&clsid); if (SUCCEEDED(hResult)) { _CMath *pMath = NULL; hResult = ::CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,_uuidof(_CMath),(LPVOID*)&pMath); if (SUCCEEDED(hResult)) { long a = 12; long b = 13; long lResult = pMath->Add(&a,&b); CString str; str.Format("%ld",lResult); AfxMessageBox(str); } } ::CoUninitialize(); CDialog::OnOK(); }

    5、运行测试程序,得到的测试结果如下图所示。 至此,DLL在VS和VB上的制作和调用就完成了。

    Processed: 0.009, SQL: 8