CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

一个菜鸟的dll问题

楼主coffeefish(咖啡鱼)2002-03-08 18:12:45 在 VC/MFC / 基础类 提问

在msdn中有关于dll调用的一段话:  
  //   File:     RUNTIME.C  
  //   A   simple   program   that   uses   LoadLibrary   and    
  //   GetProcAddress   to   access   myPuts   from   MYPUTS.DLL.    
     
  #include   <stdio.h>    
  #include   <windows.h>    
     
  typedef   VOID   (*MYPROC)(LPTSTR);    
     
  VOID   main(VOID)    
  {    
          HINSTANCE   hinstLib;    
          MYPROC   ProcAdd;    
          BOOL   fFreeResult,   fRunTimeLinkSuccess   =   FALSE;    
     
          //   Get   a   handle   to   the   DLL   module.  
     
          hinstLib   =   LoadLibrary("myputs");    
     
          //   If   the   handle   is   valid,   try   to   get   the   function   address.  
     
          if   (hinstLib   !=   NULL)    
          {    
                  ProcAdd   =   (MYPROC)   GetProcAddress(hinstLib,   "myPuts");    
     
                  //   If   the   function   address   is   valid,   call   the   function.  
     
                  if   (fRunTimeLinkSuccess   =   (ProcAdd   !=   NULL))    
                          (ProcAdd)   ("message   via   DLL   function\n");    
     
                  //   Free   the   DLL   module.  
     
                  fFreeResult   =   FreeLibrary(hinstLib);    
          }    
     
          //   If   unable   to   call   the   DLL   function,   use   an   alternative.  
     
          if   (!   fRunTimeLinkSuccess)    
                  printf("message   via   alternative   method\n");    
  }  
   
  高手们都清楚吧!我想知道其中的     MYPROC   是什么,说具体些阿 问题点数:50、回复次数:13Top

1 楼weixiao(:D)回复于 2002-03-08 18:16:02 得分 5

回调函数,即由系统调用而不是你在自己代码中调用的函数:)Top

2 楼coffeefish(咖啡鱼)回复于 2002-03-08 18:23:52 得分 0

那么在我的dll文件中是指哪一段函数啊Top

3 楼finalvictory(打倒小日本!)回复于 2002-03-08 18:25:37 得分 5

MYPROC是用户自定义的数据类型(一个函数指针),通过GetProcAddress为ProcAdd赋值,从而得到函数地址,就可以调用DLL中的函数了。Top

4 楼finalvictory(打倒小日本!)回复于 2002-03-08 18:27:34 得分 0

你做DLL的时候在.DEF文件中指定要EXPORT的函数,类型必须匹配。这里就是那个叫myPuts的函数(假定的)。Top

5 楼coffeefish(咖啡鱼)回复于 2002-03-08 18:28:11 得分 0

那么用户是在哪里自定义这个数据类型呢Top

6 楼finalvictory(打倒小日本!)回复于 2002-03-08 18:29:03 得分 30

头上的typdef语句定义了这个函数类型。Top

7 楼kelvin1945(休斯敦的沙拉)回复于 2002-03-08 18:30:01 得分 0

指你在dll中打算被别人调用的函数  
  在myputs中可以这样写:  
  __declspec(dllexport)   void   myPuts(LPSTR   szMsg)  
  {  
  //dosomething......  
  }  
  Top

8 楼coffeefish(咖啡鱼)回复于 2002-03-08 18:40:18 得分 0

如果我有3个引出函数  
  要不要写3个类似  
  typedef   VOID   (*MYPROC)(LPTSTR);   的语句?  
   
  Top

9 楼kelvin1945(休斯敦的沙拉)回复于 2002-03-08 18:57:06 得分 10

当然Top

10 楼coffeefish(咖啡鱼)回复于 2002-03-08 19:25:35 得分 0

鎴戣瘯涓€涓Top

11 楼coffeefish(咖啡鱼)回复于 2002-03-08 20:06:09 得分 0

我按照visual   c++6.0技术内幕方法,编写了一个mfc正规DLL,就是求平方根的。  
  但是在实验这个dll时候,一直提示该程序出现非法操作,为什么啊?奇怪啊  
   
  cpp中的代码如下:  
   
  extern   "C"   __declspec(dllimport)   double   SqrtRoot(double   d);   //   DLL导入函数1  
   
  typedef   double   (*SQRTPROC)(double);    
   
  HICON   m_hIcon;  
  HINSTANCE   hinstLib;    
  SQRTPROC*   pSqrtFunc;  
   
  hinstLib   =   ::LoadLibrary("SqrtDLL.dll");    
  pSqrtFunc   =   (SQRTPROC*)::GetProcAddress(hinstLib,"SqrtRoot");  
  double   dig   =   (*pSqrtFunc)(64.0);  
  Top

12 楼coffeefish(咖啡鱼)回复于 2002-03-08 20:14:24 得分 0

后来调试发现,只要有double   dig   =   (*pSqrtFunc)(64.0);    
  这条语句,就报错  
  为什么Top

13 楼kelvin1945(休斯敦的沙拉)回复于 2002-03-09 12:45:29 得分 0

double   dig   =   pSqrtFunc(64.0);    
  Top

相关问题

  • 菜鸟提问--关于DLL
  • dll的菜鸟问题!!!
  • dll菜鸟级问题
  • 菜鸟提问:.dll问题!
  • 菜鸟问题 调用dll
  • 菜鸟一问:DLL的问题
  • 菜鸟问题: 调Dll中的函数
  • 菜鸟求解DLL的导出问题
  • 菜鸟送100分:DLL引用问题!
  • 菜鸟之DLL两问!! 绝对简单

关键词

  • 函数
  • 语句
  • dll
  • myputs
  • psqrtfunc
  • hinstlib
  • myproc
  • procadd
  • 调用
  • fruntimelinksuccess

得分解答快速导航

  • 帖主:coffeefish
  • weixiao
  • finalvictory
  • finalvictory
  • kelvin1945

相关链接

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

广告也精彩

反馈

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