此贴为回答分,不属于灌水分,感谢大家的合作。
具体见:http://topic.csdn.net/u/20080512/10/528a7f7d-c410-49b3-952d-0760aec5b456.html
为了好平均分,我已将该贴转移到了非技术区。dulinbo(半杯水)的回答比较实在,易懂,也讲的比较详细,看得出来,你是用了心的。
jameshooo(胡柏华)高手就是高手呀, 什么时候我才能有你们这水平。非常感谢你对于这些基础性的东西的耐心。还有其他支持我的朋友们,不能一一点到,非常抱歉。
也许可能是我的水平还不行,大家一针见血的回答我不能理解。但以后会慢慢提高的。

解决方案 »

  1.   

    发表于:2008-05-12 17:45:3436楼 得分:2
    1.LP是long pointer(指针)
    T是TCHAR(char,或Wchar,随编译设定而定) 
    STR是string2.接收LPTSTR这个类型的参数,表示这个函数需要一个指向字符串类型的指针,该函数内部将结果拷贝到指针指向的内存,但光一个内存首地址不够,所以需要一个长度来指明可以提供多少内存可以合法操作。因此操作有问题不光是首地址的问题,也有可能是长度的问题。3.typedef __nullterminated WCHAR *NWPSTR, *LPWSTR, *PWSTR; 
    typedef可以理解为将这样的类型(nullterminated WCHAR*,指向以空字符结尾的宽字节字符串的指针)定义为NWPSTR, LPWSTR, PWSTR
    就是以前需要写成nullterminated WCHAR*的地方现在可以写为NWPSTR, LPWSTR, PWSTR。4.如果是以Unicode编译,这样写是不恰当的,可能会有问题:
    TCHAR btChar[30];
    memset(btChar,0,30);//应该是memset(btChar,0,30*sizeof(TCHAR));
    GetLogicalDriveStrings(sizeof(bfChar),bfChar);//GetLogicalDriveStrings(sizeof(bfChar)/sizeof(TCHAR),bfChar);
    这里就是要分清sizeof给出的是字节数,TCHAR占两个字节,GetLogicalDriveStrings要的是TCHAR的数量。5。sizeof是针对定义的类型给出长度的,定义的是数组就给出数组长,定义的是指针就给指针长。所以GetLogicalDriveStrings(sizeof(bfChar),bfChar);
    中长度是4你第一个说的一种能编译过去,另一种不能编译过去,没看具体代码和编译错误,就不妄断了。
    之后那个说获取不到数据,有可能是长度问题 
    ========================
    这段话,我看了好几遍,越看越有意思。=========发表于:2008-05-12 11:17:2915楼 得分:3
    sizeof(bfChar)==4
    sizeof(btChar)==60
    sizeof(btChar)/sizeof(TCHAR)==30GetLogicalDriveStrings(sizeof(bfChar),bfChar); 自己看着办吧=============这个,我也是今天看了才明白你说这句话是什么意思。