char 数组转化成string时候得奇怪问题(刚才那一到里面有乱码,不能显示了,sorry)(200分)

  • 主题发起人 主题发起人 qdlover
  • 开始时间 开始时间
你还以为是ZeroMemory导致出了错吗?这是就是用ZeroMemory的好处了,ZeroMemory将一块
内存区填充为0,为点格式化存储空间的意思,这一块内存被填充为0以后,本身并不会导
错任何错误,除非指错了要填充的地址。当你调用ReadPhysicalDrive函数后,该函数就会
把获取到的信息写到变量x的地址上,如果这时你的几个Char数组成员没有被赋值,结论就
是ReadPhysicalDrive函数并没有成功地把数据写到这些成员中。现在的解决出口就是检查
ReadPhysicalDrive函数在内部处理字符串时使用的是哪种数据类型,因为它用的是一个无
类型指针作为参数,所以从表面上判断不出来,如果你不能知道它使用的是哪种数据类型,
这个问题就不能真正解决。
 
我把源程序打包上传到
www.qdlover.com/diskid.rar了
谁有空儿帮我看看吧

多谢
 
大家可以改写成application,不会出错

程序我就不发了
 
你试过Variant没,
在ASP
//Response.Write "中文SerialNumber:"&getdiskid.SerialNumber &"<BR>"
它那知道getdiskid.SerialNumber是STRING什么的,最后把Variant转成ASP中的字串,
试试嘛,我也不太懂ASP;
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<%
set getdiskid=server.CreateObject ("diskid.server")
getdiskid.get_diskinfo
Response.Write "中文SerialNumber:"&getdiskid.SerialNumber &"<BR>"
Response.Write "ModalNumber:"&getdiskid.ModalNumber &"<BR>"
Response.Write "ControlNum:"&getdiskid.ControlNum &"<BR>"
Response.Write "HardDriveComputerID:"&getdiskid.HardDriveComputerID &"<BR>"
%>
在DELPHI中还有类型库可以引用,你在ASP中有声明没(也不知是不是这么说),
就好比调用DLL中的函数,先要声明它一样,才知道返回什么,
你又没声明,所以无论是STRING,PCHAR都会当成数字处理,所以要么声明后就可以用PCHAR
(如果ASP支持的话),要么就就改成通用的类型,我想是OLEVariant,然后转换成STRING输
出,不然你改成什么类型都会出错,更何况WIDESTING等是DELPHI特有的………………
 
我以前写的asp组件都是用string或者widestring类型的
应该不是这个问题吧?
 
To 卡色:WideString是对宽字符串的封装,它并不是Delphi所独有的。不同的类库对宽字
符串有不同的封装,C++ Builder中也有WideString类,但它使用起来完全是对象的概念,不像
Delphi中看起来像是一种简单的数据类型;VC中封装的是CCom_BSTR类;标准C++同样有wstring
类,它们都是对BSTR(wchar_t *)的封装。

To qdlover:我试用了你的程序(getdiskid项目),结果可能会使你失望:我什么都没有改,
在ASP下使用结果基本正常。我是在Win2000下试用的,你是不是在Win98下?之所以说基本正常,
是由于我发现DRIVE_INFO_OK结构其中某些成员的值有不正常的表现,感觉有越界的嫌疑,可
能是尺寸定义与DiskID动态库中的实现有出入。由于没有DiskID的源代码,所以无法确认是哪
个部分的问题。我有两个问题:
1、DiskID动态库是不是你自己写的?DRIVER_INFO_OK结构与动态库中的结构是否完全一致?
2、如果结构定义完全一致的话,是否可以保证动态库中的实现是可靠、无误的?
 
现在看来,问题部分回到原处:你的浏览器的编码设置是否不正确?
部分走到了新的地方:获取我的IBM硬盘的信息时不完全正确,需要从内部进行分析。
 
diskid.dll是我找的,忘了那里找的了
这个问题也不重要,主要是我搞不懂我什么地方写错了,我也是win2000的平台,可能跟硬盘有关的吧
谢谢大家的热情帮助,耽误大家时间拉

 
后退
顶部