首页
社区
课程
招聘
为什么我写的VC++程序在不同的环境下会有不同的结果>?
发表于: 2006-7-1 22:26 4682

为什么我写的VC++程序在不同的环境下会有不同的结果>?

2006-7-1 22:26
4682
typedef LPCTSTR (*GETDISKID)();

        HMODULE hTestDLL = NULL;
        HMODULE hEXEInstance;
        GETDISKID pFunction;
        LPCTSTR strDiskIdPath;       

        if((hEXEInstance = ::LoadLibrary("HDSerialNumRead.dll"))==NULL)
        {
                MessageBox("获取硬盘序列号错误!");
                return;
        }
        VERIFY(pFunction = (GETDISKID)::GetProcAddress(hEXEInstance,"HDSerialNumRead"));
        strDiskIdPath = pFunction();
        while(strDiskIdPath && *strDiskIdPath==' ')
        {
                strDiskIdPath++;//去除左边的空格
        }

        MessageBox(strDiskIdPath);
        ::FreeLibrary(hEXEInstance);

我在调试状态运行,结果没有一点问题.

但是直接运行程序,结果却是这样:

而且再点一次确定,得出的结果却又是正常的.

我在公司的一个X64 WIN2003 EN上运行,根本没有结果,就是跳出一个提示框,什么提示都没有.

是我的程序有问题还是怎么,请高手指导一下.

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 181
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
刚学vc 不懂 哈!期待高手!
2006-7-1 23:05
0
雪    币: 235
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
这样的问题应该是HDSerialNumRead.dll库本身存在缺陷吧。。
2006-7-3 08:25
0
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
原来VC++是你写的```弓虽!!!!
2006-7-3 09:48
0
雪    币: 259
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
最初由 vlit 发布
原来VC++是你写的```弓虽!!!!


被你抓住小辫了,呵呵,已经改过来了.

这样的问题应该是HDSerialNumRead.dll库本身存在缺陷吧。。


这个DLL是网上下载的,应该说是一个比较成熟的东西了吧.有些软件用这个东西来获取硬盘的序列号.

在VB.NET下面调用
Private Declare Function HDSerialNumRead Lib "HDSerialNumRead.dll" () As String

竟然报"The data area passed to a system call is too small"的错误.

但是在VBA里面调用却很正常.
2006-7-3 10:26
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 rufus 发布
typedef LPCTSTR (*GETDISKID)();

HMODULE hTestDLL = NULL;
HMODULE hEXEInstance;
GETDISKID pFunction;
........


出现上面的问题,总的来说可以做出如下总结:
1:对于指针,和指针函数,一定要做出空判断.防止出错,或是用断言等等.
2:对于你出现上面的情况,我们只讨论第二种,首先操作系统有很大的差别X64 WIN2003 EN,差别出在API上面,操作系统调用动态库产生的问题,你可以在调试模式下在2003上面输出指针的情况.另外查一下得到的返回结果的值出了什么问题.
2006-7-3 10:33
0
游客
登录 | 注册 方可回帖
返回
//