程序开发中,经常会使用到动态库,那么动态库该如何实现和调用呢?本文通过一个简单的例子实现。
使用工具:VS2008
使用语言:C++
开发步骤:
#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);
};
#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("静态加载动态库"));
}
extern "C"
__declspec(dllexport) void CreateObject()
{
// *pObj = new CEcu;
AfxMessageBox(_T("动态加载动态库"));
}新建一个对话框应用程序,添加两个按钮,分别用于静态和动态调用动态库
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);
}
#include"DllFunc.h" #pragma comment(lib,"DllCreateFuncDemo.lib")
void CDllUseDemoDlg::OnBnClickedBtnDllFunc()
{
CDllFunc dll;
dll.Show();
}
原文:http://blog.csdn.net/bingdianlanxin/article/details/42341407