CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

新手求救高手(dll)

楼主zqdl(紫气东来)2004-05-01 00:49:40 在 VC/MFC / 进程/线程/DLL 提问

我写了一个最简单的dll程序,刚刚学习,只想测试最简单的功能  
  dll文件是win32dll,引入dll采用显示加载的方法。  
  源程序如下,感觉没错。Loadlibrary也能成功,但就是GetProcAddress怎么也成功不了。  
   
  定义Dll,用了vc6向导生成的程序:  
  //Dll1.h  
  #ifdef   DLL1_EXPORTS  
  #define   DLL1_API   __declspec(dllexport)  
  #else  
  #define   DLL1_API   __declspec(dllimport)  
  #endif  
  //   This   class   is   exported   from   the   Dll1.dll  
  class   DLL1_API   CDll1   {  
  public:  
          CDll1(void);  
          //   TODO:   add   your   methods   here.  
  };  
  extern   DLL1_API   int   nDll1;  
  DLL1_API   int   fnDll1(void);  
   
  //   Dll1.cpp   :   Defines   the   entry   point   for   the   DLL   application.  
  #include   "stdafx.h"  
  #include   "Dll1.h"  
  BOOL   APIENTRY   DllMain(   HANDLE   hModule,  
                                                DWORD     ul_reason_for_call,  
                                                LPVOID   lpReserved  
                                            )  
  {  
          switch   (ul_reason_for_call)  
          {  
                  case   DLL_PROCESS_ATTACH:  
                  case   DLL_THREAD_ATTACH:  
                  case   DLL_THREAD_DETACH:  
                  case   DLL_PROCESS_DETACH:  
                          break;  
          }  
          return   TRUE;  
  }  
  //   This   is   an   example   of   an   exported   variable  
  DLL1_API   int   nDll1=0;  
  //   This   is   an   example   of   an   exported   function.  
  DLL1_API   int   fnDll1(void)  
  {  
          return   42;  
  }  
  //   This   is   the   constructor   of   a   class   that   has   been   exported.  
  //   see   Dll1.h   for   the   class   definition  
  CDll1::CDll1()  
  {  
          return;  
  }  
   
  使用DLL:   在MFC程序的OnDraw里加入如下代码进行测试  
  void   CDLL123View::OnDraw(CDC*   pDC)  
  {  
          CDLL123Doc*   pDoc   =   GetDocument();  
          ASSERT_VALID(pDoc);  
          HINSTANCE   hDLL;  
          typedef   int   (CALLBACK*   LPFN)(void);  
          LPFN   lpfn;  
          hDLL=LoadLibrary("DLL1");  
          if(hDLL   !=   NULL)  
          {  
   
   
                  lpfn=(LPFN)GetProcAddress(hDLL,"fnDll1");  
                  if(!lpfn)  
                  {  
                          FreeLibrary(hDLL);  
                          AfxMessageBox("出错");  
                  }  
                  else{  
                          int   a;  
                          a=lpfn();  
                          AfxMessageBox("成功");  
                  }  
          }  
          //   TODO:   add   draw   code   for   native   data   here  
  }  
   
  结果调试的时候,lpfn每次都等于0x0000000.  
  试了好多次了,毕设要用到Dll,但最简单的都掌握不了,大虾救命呀!!!!!  
   
   
  问题点数:0、回复次数:2Top

1 楼vcforever(累)回复于 2004-05-01 01:36:34 得分 0

在你的程序中添加一个.def文件,把你的导出函数写在EXPORTS节下面  
  EXPORTS  
        你的导出函数名称  
   
  然后在使用显式加载的方法就可以了!Top

2 楼cdcjk(攀辉)回复于 2004-05-02 11:19:45 得分 0

upTop

相关问题

  • DLL
  • DLL?
  • dll
  • DLL
  • *.dll
  • dll?
  • (.dll)
  • dll is 》》》----------------------------------------->
  • DLL
  • dll

关键词

  • dll
  • api
  • exports
  • 程序
  • case
  • defines

得分解答快速导航

  • 帖主:zqdl

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo