CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

程序中调用DLL时出错, 请大家帮忙看一下.

楼主021850524(吸血鬼牌卫生巾)2006-01-30 07:18:07 在 VC/MFC / 基础类 提问

程序中调用DLL时出错,   请大家帮忙看一下.  
   
  先大致描述一下程序本身.  
   
  我用VC的Win32   Dynamic   Link   Library向导做了一个dll,   主要是关于对光驱控制方面的,   内容是:  
   
  #pragma   warning(disable:4786)  
  #pragma   warning(disable:4251)  
   
  #ifdef   CDCTRL_EXPORTS  
  #define   CDCTRL_API   __declspec(dllexport)  
  #else  
  #define   CDCTRL_API   __declspec(dllimport)  
  #endif  
   
  #include   <vector>  
  #include   <string>  
   
  //   This   class   is   exported   from   the   cdctrl.dll  
  class   CDCTRL_API   CCdctrl   {  
  private:  
    CCdctrl(void);  
    CCdctrl(const   CCdctrl   &);  
    const   CCdctrl   &operator=(const   CCdctrl   &);  
   
  public:    
    ~CCdctrl();  
   
   
    //   初始化函数  
    //void   initial();  
   
   
    //   singleton  
    static   CCdctrl   &instance()   {  
      static   CCdctrl   v;  
      return   v;  
    }  
   
     
    //   获得系统所有的光驱列表.  
    void   get_drive_list(std::vector<std::string>   &drvlist);  
   
   
  private:  
    //   系统所有光驱列表.  
    std::vector<std::string>   m_drvlist;  
   
   
    //   当前控制光驱索引.  
    int   m_ctrldrv;  
  };  
   
  其中的构造函数是这样写的:  
  CCdctrl::CCdctrl()  
  {    
    //   收集所有光盘驱动器  
    std::string   str   =   "A:";  
    std::string   tmp;  
    for(;   str[0]<='Z';   ++str[0])   {  
      tmp   =   str   +   "/";  
      if(DRIVE_CDROM==::GetDriveType(tmp.c_str()))   {  
        m_drvlist.push_back(str);  
      }  
    }  
    m_ctrldrv   =   0;  
  }  
   
  测试程序中用到的那个get_drive_list函数是这样的:  
  void   CCdctrl::get_drive_list(std::vector<std::string>   &drvlist)    
  {  
    drvlist   =   m_drvlist;  
  }  
   
  测试程序的内容(测试程序为Win32   Console   Application):  
  #include   "../cdctrl/cdctrl.h"  
  #include   <vector>  
  #include   <string>  
  #include   <iostream>  
   
  using   namespace   std;  
   
  int   main()    
  {  
    CCdctrl   &cdctrl   =   CCdctrl::instance();  
   
    vector<string>   drv;  
    cdctrl.get_drive_list(drv);  
    int   n   =   drv.size();  
    cout<<n<<endl;  
   
    return   0;  
  }  
   
  现在说一下运行时的问题:  
  1.  
  在Debug模式下,   运行时能正确找到系统的所有光驱,   名字与数量都是对的,   但是在程序退出的时候就报错.  
  在Release模式下,   运行时不能找到任何系统的光驱,   但是在程序退出的时候无任何问题.  
   
  2.  
  我检查发现,   在dll中,   release下,   std::string无任何作用,   比如string   str   =   "abc";   发现程序中str的内容始终为"".    
   
  听说VC6的stl有问题,   然后我把stl库换成了STL-port,   版本4.6.2,   问题1中Debug模式下退出时不报错了,   但是还是找不到光驱,   究其原因还是问题2.  
   
  dll的工程,   我选择的Code   Generation->use   run-time   library中关于Release和Debug分别是Multithreaded   Dll/Debug   Multithreaded   Dll,   测试的工程中选择的也是Multithreaded   Dll/Debug   Multithreaded   Dll.    
  是这里的问题吗?   我应该改成什么?  
   
  后来我又建立了一个mfc的.exe工程,   在使用stlport时,   也是debug模式正常,   release模式string不正常;   没有stlport时,   debug模式退出报错,   release不报错,   但string也不正常.  
   
  系统环境:  
  VC6+SP6,   Windows   2000   pro   +   SP4.  
   
  另外,   可否告知一下哪里有<<马大帅3>>的ftp或者http下载,   两个问题都感激不尽.   grazie! 问题点数:20、回复次数:4Top

1 楼021850524(吸血鬼牌卫生巾)回复于 2006-01-30 21:55:48 得分 0

麻烦大家帮忙看一下啊.   看看程序就好了,   马大帅的下载我已经找到了.Top

2 楼021850524(吸血鬼牌卫生巾)回复于 2006-01-31 06:38:10 得分 0

我把DLL工程的release模式的优化选项关闭或者选择default优化选项(VC默认选的是  
  max   speed),   然后测试工程中也把优化选项关闭或者选择default优化选项,   程序就能  
  正常运行了,   我看了看产生的代码大小,   因为程序本身就不大,   所以也没法评论是不是  
  差很多.   估计是dll中的那个singleton模式写得不好,   才导致在优化静态变量的时候出  
  了问题.   一会我换成指针的形式再试一下.  
   
  现在更准确的原因正在查找中.   不过,   请问,   有什么更好的方法可以避免的吗?  
   
  Top

3 楼zephyr007(道可道)回复于 2006-01-31 21:24:08 得分 20

好久没有用VC6了,试试在VC2003下如何Top

4 楼021850524(吸血鬼牌卫生巾)回复于 2006-03-14 20:13:20 得分 0

问题已经解决了,   是VC6的问题,   在静态成员和内联方面优化出了问题.   问题已经解决,   谢谢关心.Top

相关问题

  • C写的Dll,在delphi里面调用出错,帮忙看一下
  • 调用存储过程出错,帮忙看一下(在线等)
  • DLL调用出错
  • 调用.dll出错
  • 关于一个扩展dll中封装了一个dialog,在调用这个dialog的domodal()的时候出错,请大家帮忙看一下!
  • 求人帮忙看一下DLL的调用问题
  • ASP调用ORACLE中包的函数出错,请大家帮我看一下。
  • 弱问:DLL调用出错
  • 为什么在线程中调用主对话框函数时会出错?看一下我的代码
  • Dll调用出错?who can help me?

关键词

  • win32
  • 选项
  • 模式
  • 优化
  • vc
  • 测试
  • dll
  • release
  • debug
  • 系统

得分解答快速导航

  • 帖主:021850524
  • zephyr007

相关链接

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

广告也精彩

反馈

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