VS之动态库实现和调用

来源:互联网 发布:如何在淘宝网上买课件 编辑:程序博客网 时间:2024/06/07 01:57

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

使用工具: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)#endifclass 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#endifCDllFunc::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效果如下



源码下载


0 0
原创粉丝点击