vc++ 调用dll应用与案例
静态库直接链接,#pragma command(lib,"rw.lib");
然后在系统可以搜索的路径下放入你的rw.dll文件
动态库的链接
typedef int (WINAPI *MYFUNC)(int nPort, WORD wSID, BYTE bDT, WORD bDID,struct _RWStatus *) ;
MYFUNC ProcAdd=NULL;
HINSTANCE hInst=LoadLibrary("rw.dll");
if(hInst!=NULL)
{
ProcAdd=(MYFUNC)GetProcessAddress(hInst,"Init_RW");//注意你dll导出的函数名
if(ProcAdd!=NULL)
{
ProcAdd(...);
}
}
....
FreeLibrary(hInst);
比如dll中有加减两面个函数
#include "..\\DLL1.h" //加入头文件
void CUseDllDlg::OnOK()
{
HMODULE hDll=::LoadLibrary("D:\\VC\\Lesson1\\DLL1\\Debug\\dll1.dll"); //定义一个窗口句柄,用来加载动态库
if(hDll==NULL){AfxMessageBox("not found");return;} //如果加载失败,反回错误
try //试着运行一段代码
{
DLLAdd funAdd=(DLLAdd)::GetProcAddress(hDll,"dllAdd"); //定义一个函数指针来指向调用的函数
if(funAdd==NULL) throw("not found"); //如果加载失败,反回错误
int nResult=funAdd(3,6); //调用加法函数
CString str; //输出调用结果
str.Format("%d",nResult);
AfxMessageBox(str);
//减法
DLLSub funSub=(DLLSub)::GetProcAddress(hDll,"dllSub");
if(funAdd==NULL) throw("not found");
nResult=funSub(3,6);
str.Format("%d",nResult);
AfxMessageBox(str);
}
catch(LPCSTR lpErr) //用来接住throw抛出的错误,有字符串显现
{
AfxMessageBox(lpErr);
}
catch(...) //如果不是throw抛出的错误,是其它错误,弹出错误对话框
{
AfxMessageBox("Uoknow error");
}
::FreeLibrary(hDll); //释放库文件
}
作者:古梅飞动
公司:蜜团科技
出处:http://www.mitsofts.com/index.php
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。