您提出这么好的问题是CSDN的福气,也是大家的福气,尽管没人回答得了,但您总不至于不结贴吧?既然一个回答的都没有,您就无法结贴了。我帮你UP吧,你只要在结贴的时候给我所有的分。万一碰上高人能回答了您的问题,那时候给我一半就可以了。

解决方案 »

  1.   

    经过这几天的学习,我大致掌握了一些知识,在这里共享一下学习成果。我使用的是c语言的格式,但是由于调用的都是api,所以和delphi里的使用是一样的。在这里要感谢诸位尤其是西门吹水的提示。不过我还有遗留的问题,就是如何使用dll文件中资源,比如菜单。 HINSTANCE m_hLangDLL3; // handle to LoadLibrary from .DLL file 
         HRSRC hResource; // handle for FindResource  
    HGLOBAL hMem; // handle for LoadResource 
    LPVOID lpResource; // address of resource data  // ::FreeLibrary("Chinese.dll"); // Load the file from which to copy the resource. 
    // 获取应用程序.EXE或dll的文件句柄,
    // 该句柄用于在.EXE或dll文件中寻找资源
    m_hLangDLL3 = ::LoadLibrary("English.dll"); //第一个参数是模块句柄
    //第二个是要查找的资源名字,如"MYDIALOG"
    //第三个是资源类型
    //返回该资源句柄
    //LoadResouce以该句柄为参数装入资源
    //寻找具有指定资源ID和指定资源类型的资源文件中的资源位置,返回值为有名称的资源
    //在动态链接库中查找资源类型为RT_MENU,资源名为128的资源
    hResource = ::FindResource(m_hLangDLL3, MAKEINTRESOURCE(128), RT_MENU);
    if (hResource == NULL) 
    AfxMessageBox("Error!");
    // Load and lock the resource directory.
    // first parameter: resource-module handle
    // second parameter: resource handle
    // 将该资源装入内存
    // 返回值标识了用于接受资源数据的全局数据块
    hMem = ::LoadResource(m_hLangDLL3, hResource);
    if (hMem == NULL) 

    FreeResource(hResource); 
    AfxMessageBox("Error!"); 
    }  //锁定该资源
    //锁定hg所标定的内存块,并返回所标定内存块的虚拟内存地址
    //返回值指向该资源开始处的第一个字节
    lpResource = ::LockResource(hMem); 
    if (lpResource == NULL) 

    FreeResource(hResource); 
    AfxMessageBox("Error!"); 
    }  //若上述四步中的任何一步发生问题,则返回并释放相应的内存。
    //接下去要做的事情就是根据文件数据类型进行数据加载
    //.......
    //举例
    //如何loadmenu并体现出来?请提示
         UnlockResource(hMem);
         FreeResource(hMem);
      

  2.   

    HINSTANCE m_hLangDLL3; // handle to LoadLibrary from .DLL file 
         HRSRC hResource; // handle for FindResource  
    HGLOBAL hMem; // handle for LoadResource 
    LPVOID lpResource; // address of resource data  // ::FreeLibrary("Chinese.dll"); // Load the file from which to copy the resource. 
    // 获取应用程序.EXE或dll的文件句柄,
    // 该句柄用于在.EXE或dll文件中寻找资源
    m_hLangDLL3 = ::LoadLibrary("English.dll"); //第一个参数是模块句柄
    //第二个是要查找的资源名字,如"MYDIALOG"
    //第三个是资源类型
    //返回该资源句柄
    //LoadResouce以该句柄为参数装入资源
    //寻找具有指定资源ID和指定资源类型的资源文件中的资源位置,返回值为有名称的资源
    //在动态链接库中查找资源类型为RT_MENU,资源名为128的资源
    hResource = ::FindResource(m_hLangDLL3, MAKEINTRESOURCE(128), RT_MENU);
    if (hResource == NULL) 
    AfxMessageBox("Error!");
    // Load and lock the resource directory.
    // first parameter: resource-module handle
    // second parameter: resource handle
    // 将该资源装入内存
    // 返回值标识了用于接受资源数据的全局数据块
    hMem = ::LoadResource(m_hLangDLL3, hResource);
    if (hMem == NULL) 

    FreeResource(hResource); 
    AfxMessageBox("Error!"); 
    }  //锁定该资源
    //锁定hg所标定的内存块,并返回所标定内存块的虚拟内存地址
    //返回值指向该资源开始处的第一个字节
    lpResource = ::LockResource(hMem); 
    if (lpResource == NULL) 

    FreeResource(hResource); 
    AfxMessageBox("Error!"); 
    }  //若上述四步中的任何一步发生问题,则返回并释放相应的内存。
    //接下去要做的事情就是根据文件数据类型进行数据加载
    //.......
    //举例
    //如何loadmenu并体现出来?请提示
         UnlockResource(hMem);
         FreeResource(hMem);
      

  3.   

    老 forlande() ,把分给我呀!