DLL制作和调用

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上的制作和调用就完成了。

猜你喜欢

转载自blog.csdn.net/qq_46649692/article/details/108925677
今日推荐