程序开发中,经常会使用到动态库,动态库不能直接运行,需要依赖其他程序调用,那么我们该如何调试我们的动态库呢?本文通过一个简单的例子说明。
使用工具:VS2008
使用语言:C++
开发步骤:
1.调用动态库的应用程序
1.1新建对话框应用程序
1.2设计动态库接口
该接口用于在加载动态库时显示动态库的一些基本信息
DllTestAppDlg.h
struct tDLL_INFORMATION
{
LPCTSTR sDLLName;
LPCTSTR sFuncDescr;
LPCTSTR sAuthorName;
};
typedef bool (*LPFNREGISTER_CreateObject)(void**);
typedef bool (*LPFNREGISTER_GetDllInformation)(void**);
typedef bool (*LPFNREGISTER_ReleaseObject)(void*);
DllTestAppDlg.cpp
void CDllTestAppDlg::OnBnClickedBtnLoad()
{
CString s1 = _T(""), s=_T("");
s = _T("dll files(*.dll)|*.dll|所有文件(*.*)|*.*||");
CFileDialog de(true, s1, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR,s, NULL );
if(de.DoModal() == IDOK)
{
m_sDllPathName = de.GetPathName(); //path and filename
}
else
{
return;
}
if(m_sDllPathName.IsEmpty())
{
m_btnRunDll.EnableWindow(FALSE);
}
else
{
m_btnRunDll.EnableWindow(TRUE);
}
CString str = _T("");
int cnt = 0,i = 0;
char p[256]={0};
LPFNREGISTER_GetDllInformation lpfnRegister;
HINSTANCE hInDll = NULL;
hInDll = LoadLibrary(m_sDllPathName);
str = _T("GetDllInformation");
cnt = str.GetLength();
for(i=0; i<cnt; i++)
{
p[i] = str.GetAt(i);
}
lpfnRegister=(LPFNREGISTER_GetDllInformation)GetProcAddress(hInDll,p);
tDLL_INFORMATION* pInfo = NULL;