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

如何从dll中到处变量?书上写的寥寥几句,没太看懂,谢谢!!

楼主xiaoc(xiaoc)2002-04-03 16:58:00 在 VC/MFC / 基础类 提问

想来应该是用  
  __declspec(dllexport)  
  __declspec(dllimport)    
   
  但是不知该怎么用,试了几次都不好用,谁来帮帮帮忙。 问题点数:100、回复次数:16Top

1 楼xiaoc(xiaoc)回复于 2002-04-03 17:07:58 得分 0

是导出,写错了,不好意思Top

2 楼xiaoc(xiaoc)回复于 2002-04-03 17:12:08 得分 0

呵呵,写错了,是导出变量Top

3 楼xiaoc(xiaoc)回复于 2002-04-03 17:14:09 得分 0

呵呵,写错了,是导出变量Top

4 楼webber84(***闭关修炼中***)回复于 2002-04-03 17:20:36 得分 0

这样写你的DLL头文件:  
  #   ifdefine   DLL_EXPORT  
  #   define   MYDLL   __declspec(dllexprot)  
  #   else  
  #   define   MYDLL   __declspec(dllimport)  
  #   endif  
  MYDLL   double   n;     //输出n  
  MYDLL   //other   virables  
  在你的DLL的CPP文件的最前面加上#   define   DLL_EXPORT。然后把DLL头文件,lib文件加入  
  到你的工程中就可以了。(工程中不要定义DLL_EXPORT)  
   
  Top

5 楼xiaoc(xiaoc)回复于 2002-04-03 17:31:30 得分 0

能不能不用lib,我是直接LoadLibrary动态链接库文件的Top

6 楼2ndboy(贱男春)回复于 2002-04-03 17:36:22 得分 0

好象不行Top

7 楼Meathead(阿森)回复于 2002-04-03 17:36:22 得分 10

换另种方式动态加载DLL.  
  定义全局函数,  
  并函数名写在.def中EXPORTS后  
  每行写一个函数名  
  exp:  
  //.def  
  EXPORTS  
          C_CreateManager  
  //声明  
  HANDLE   C_CreateManager();  
  //函数体  
  HANDLE   C_CreateManager()  
  {  
  //....        
          return   NULL;  
  }  
  在需要用的地方  
  先把函数  
  typedef   HANDLE   (*S_CreateManager)();  
   
  S_CreateManager   m_pCreateManager;  
  //加载  
  m_hDllInst   =   ::LoadLibrary(*.DLL);  
  m_pCreateManager=   (S_CreateManager)GetProcAddress(m_hDllInst,   "C_CreateManager");  
   
  然后就可以象一般的函数用了.  
  别忘了头文件的引用哦.  
  用完后也要卸载哦.  
  Top

8 楼webber84(***闭关修炼中***)回复于 2002-04-03 17:36:57 得分 50

那你可以用一个函数,专门返回这个变量。Top

9 楼Meathead(阿森)回复于 2002-04-03 17:39:44 得分 0

是导出变量可考虑用参数的方法,那样比较安全.  
  Top

10 楼xiaoc(xiaoc)回复于 2002-04-03 17:52:47 得分 0

呵呵,好象的返值比较和我的胃口  
   
  我看了一些资料,给我感觉似乎写def文件的方法比较老,过时了,是这样吗?Top

11 楼xiaoc(xiaoc)回复于 2002-04-03 17:54:35 得分 0

__declspec(dllexport)   int   totallen;  
  __declspec(dllexport)   struct   IPAddr   *psourip,*pdestip;  
  __declspec(dllexport)   WORD   sourport,destport;  
  __declspec(dllexport)   BYTE   *pdata;  
   
  书上这样做,我试了不好用Top

12 楼scxy(小熊)回复于 2002-04-05 09:03:36 得分 0

dddTop

13 楼2ndboy(贱男春)回复于 2002-04-05 12:13:42 得分 20

用一个导出函数来返回变量值吧,Winamp的插件就是这么做的Top

14 楼zyj_vc(zyj)回复于 2002-04-05 12:27:35 得分 20

用GetProcAddress就可以了,当然先还是要用__declspec(dllexport)先定义。注意在不同的进程中,dll中的全局变量有各自的储存地址,如果要在不同进程中用到同一个全局变量,就要用共享数据段。Top

15 楼xiaoc(xiaoc)回复于 2002-04-08 17:48:59 得分 0

zyj_vc的说法我很感兴趣,等我试好用了一定给分Top

16 楼xiaoc(xiaoc)回复于 2002-04-14 17:33:29 得分 0

结帖,  
   
  这几天有些事,没时间试验zyj_vc的说法了,就当是好用了,呵呵,谢谢大家Top

17 楼xiaoc(xiaoc)回复于 2002-04-14 17:36:49 得分 0

结帖,      
     
  这几天有些事,没时间试验zyj_vc的说法了,就当是好用了,呵呵,谢谢大家Top

相关问题

  • dll能导入变量吗?
  • dll里的变量问题
  • dll中的共享变量问题
  • DLL导出变量的问题
  • 如何向DLL传递一个变量?
  • 关于DLL中的CBitmap变量
  • 如何建立DLL全局变量?
  • 关于DLL全局变量的问题
  • 关于dll的全局变量
  • 关于dll的全局变量

关键词

  • 函数
  • dll
  • 文件
  • vc
  • createmanager
  • 变量
  • declspec
  • zyj
  • dllexport
  • 谢谢

得分解答快速导航

  • 帖主:xiaoc
  • Meathead
  • webber84
  • 2ndboy
  • zyj_vc

相关链接

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

广告也精彩

反馈

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