程序中调用DLL时出错, 请大家帮忙看一下.
程序中调用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!