首页 > 代码库 > 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之动态库实现和调用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。