比如说做一个显示一个消息框hello world的dll,然后程序调用这个dll,我不是很懂,不知道这样的提问对不对,能不能实现啊,帮个忙了

解决方案 »

  1.   

    这么做很简单的,关键的难点在你的dll如果调用了自己工程的资源(对话框模板),在你调用dll的工程中又没有这个模板定义的话,会找不到的,建议看看书
      

  2.   

    那现在不考虑这些复杂的问题,我只要能实现这样一个简单功能就行了,现在手头没有资料,你能做一个发给我嘛,如果不介意的话,我的email:[email protected]
      

  3.   

    比如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); //释放库文件}
      

  4.   

    新建一个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释放。你可以找些资料来看。
      

  5.   

    谢谢上面几位,我先试试看,不行再来问你们,puzzledman你发个过来瞧瞧吧
      

  6.   

    zwcat,我怎么只生成了mydll.dll啊。没有mydll.lib.我建工程的时候都是VC默认的步骤