首页 > 代码库 > VS之动态库实现和调用

VS之动态库实现和调用

程序开发中,经常会使用到动态库,那么动态库该如何实现和调用呢?本文通过一个简单的例子实现。

使用工具:VS2008

使用语言:C++

开发步骤:

1.新建动态库程序

1.1新建调用类和类中函数的动态库

新建类,在.h和.cpp文件顶部分别添加定义,并在类名前加上导出标志
DllFunc.h
#pragma once

#ifdef MY_DLL_EXPORTS
#define MY_DLL_API __declspec(dllexport)
#else
#define MY_DLL_API __declspec(dllimport)
#endif

class MY_DLL_API CDllFunc
{
public:
	CDllFunc(void);
	~CDllFunc(void);
public:
	void Show(void);
};
DllFunc.cpp
#include "StdAfx.h"
#include "DllFunc.h"

#ifndef MY_DLL_EXPORTS
	#define MY_DLL_EXPORTS
#endif

CDllFunc::CDllFunc(void)
{
}

CDllFunc::~CDllFunc(void)
{
}

void CDllFunc::Show(void)
{
	AfxMessageBox(_T("静态加载动态库"));
}

1.2新建接口类动态库

新建类,在.cpp文件顶部添加接口函数
extern "C"
__declspec(dllexport) void CreateObject()
{
//	*pObj = new CEcu;
	AfxMessageBox(_T("动态加载动态库"));
}

2.新建动态库调用程序

新建一个对话框应用程序,添加两个按钮,分别用于静态和动态调用动态库

技术分享

2.1动态加载动态库

2.1.1添加动态库.dll

技术分享

2.1.2加载动态库并调用动态库函数

void CDllUseDemoDlg::OnBnClickedBtnDllInfo()
{
	HINSTANCE hIn = NULL;
	hIn = LoadLibrary(_T("DllCreateInfoDemo.dll"));

	if(hIn != INVALID_HANDLE_VALUE)
	{}
	else
	{
		MessageBox(_T("Load DLL error"));
		return;
	}

	typedef void (*LPFNREGISTER)();

	LPFNREGISTER pFun = NULL;

	char p[256] = {0};
	CString str = _T("CreateObject");
	int cnt = str.GetLength();
	for(int i=0; i<cnt; i++)
	{
		p[i] = str.GetAt(i);
	}
	pFun = (LPFNREGISTER)GetProcAddress(hIn,p);

	(*pFun)();

	FreeLibrary(hIn);
}

2.1.3效果如下

技术分享

2.2静态加载动态库

2.2.1添加动态库.h .lib .dll并导入头文件.h到工程中

技术分享

2.2.2标识需要加载的.lib文件

#include"DllFunc.h"
#pragma comment(lib,"DllCreateFuncDemo.lib")

2.2.3直接使用类调用函数

void CDllUseDemoDlg::OnBnClickedBtnDllFunc()
{
	CDllFunc dll;
	dll.Show();
}

2.2.4效果如下

技术分享

源码下载


VS之动态库实现和调用