谁能教我做一个最简单的dll调用例子? 比如说做一个显示一个消息框hello world的dll,然后程序调用这个dll,我不是很懂,不知道这样的提问对不对,能不能实现啊,帮个忙了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这么做很简单的,关键的难点在你的dll如果调用了自己工程的资源(对话框模板),在你调用dll的工程中又没有这个模板定义的话,会找不到的,建议看看书 那现在不考虑这些复杂的问题,我只要能实现这样一个简单功能就行了,现在手头没有资料,你能做一个发给我嘛,如果不介意的话,我的email:[email protected] 比如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); //释放库文件} 新建一个win32 dll工程,取名mydll,加一个函数:void _declspec( dllexport ) ShowMessage(){ MessageBox(NULL,"Hello world","dll",MB_OK);}编译连接,将生成的mydll.lib,mydll.dll拷贝到你的执行工程的目录下。在执行程序中加一个函数声明:void ShowMessage();在菜单Project->Setting的Link中输入mydll.lib就可以调用ShowMessage()了。这是动态库的静态链接,还有一种动态链接,不需要lib文件,但要声明函数指针,用LoadLibrary,GetProcAddress,得到dll库中的函数地址,就可以调用了,最后用FreeLibrary释放。你可以找些资料来看。 谢谢上面几位,我先试试看,不行再来问你们,puzzledman你发个过来瞧瞧吧 zwcat,我怎么只生成了mydll.dll啊。没有mydll.lib.我建工程的时候都是VC默认的步骤 VC6如何安装BXP在无盘工作站上? 看了好多帖子都没能解决这个问题:如何用VC改变Excel的字体,比如大小、粗细等 弱弱的问。。。 回调函数的参数列表是怎么传进去的 SQL语法的问题! 100分,API编程的新手的一个入门问题! 怎样禁止编辑框中的光标显示? VC 插件 关于微软自己的控件下载问题!! 如何取得机器的信息,如用户,组织,谢谢 大家好 控件与选单
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); //释放库文件}
void _declspec( dllexport ) ShowMessage()
{
MessageBox(NULL,"Hello world","dll",MB_OK);
}
编译连接,将生成的mydll.lib,mydll.dll拷贝到你的执行工程的目录下。在执行程序中加一个函数声明:
void ShowMessage();
在菜单Project->Setting的Link中输入mydll.lib
就可以调用ShowMessage()了。
这是动态库的静态链接,还有一种动态链接,不需要lib文件,但要声明函数指针,用LoadLibrary,GetProcAddress,得到dll库中的函数地址,就可以调用了,最后用FreeLibrary释放。你可以找些资料来看。