阅读:1916回复:18
再问关于宽字符。
函数定义为:
Install(IN LPTSTR HardwareId,IN LPTSTR INFFile) 如果这样调用Install(\"*hardware\\hd000\",\"inffile.inf\")成功! 但是: char* buffer = new char[30]; wsprintf(buffer,\"*hardware\\\\hd000\"); Install((LPTSTR)buffer,\"inffile,inf\");就不成功。 为什么? 怎么办? MSDN中什么地方讲到LPTSTR的? |
|
|
沙发#
发布于:2002-08-16 10:47
再不顶就没了。
|
|
|
板凳#
发布于:2002-08-16 11:25
帮你定定吧 :D
|
|
地板#
发布于:2002-08-16 11:33
我的函数就是2000DDK中的setup\\install中的:
Install(IN LPTSTR HardwareId,IN LPTSTR INFFile,OUT PBOOL RebootRequired OPTIONAL) 我用char* buffer = new char[30]; wsprintf(buffer,\"*hardware\\\\hd000\"); Install((LPTSTR)buffer,\"inffile,inf\");就不成功。 但Install(\"*hardware\\hd000\",\"inffile.inf\")成功! 郁闷呀,怎么会有这样的事? |
|
|
地下室#
发布于:2002-08-16 11:35
函数定义为: LPTSTR 的类型在MSDN里面怎么没有呢??? :o :o :o 不成功的原因说具体点 |
|
|
5楼#
发布于:2002-08-16 11:42
在INSTALL中的这个函数出错错误是87(参数错误)
SetupDiSetDeviceRegistryProperty(DeviceInfoSet, &DeviceInfoData, SPDRP_HARDWAREID, (LPBYTE)HardwareId, (lstrlen(HardwareId)+1+1)*sizeof(TCHAR)) |
|
|
6楼#
发布于:2002-08-16 13:46
看一下这个:
#ifdef UNICODE // r_winnt #ifndef _TCHAR_DEFINED typedef WCHAR TCHAR, *PTCHAR; typedef WCHAR TBYTE , *PTBYTE ; #define _TCHAR_DEFINED #endif /* !_TCHAR_DEFINED */ typedef LPWSTR LPTCH, PTCH; typedef LPWSTR PTSTR, LPTSTR; typedef LPCWSTR LPCTSTR; typedef LPWSTR LP; #define __TEXT(quote) L##quote // r_winnt #else /* UNICODE */ // r_winnt #ifndef _TCHAR_DEFINED typedef char TCHAR, *PTCHAR; typedef unsigned char TBYTE , *PTBYTE ; #define _TCHAR_DEFINED #endif /* !_TCHAR_DEFINED */ typedef LPSTR LPTCH, PTCH; typedef LPSTR PTSTR, LPTSTR; typedef LPCSTR LPCTSTR; #define __TEXT(quote) quote // r_winnt |
|
7楼#
发布于:2002-08-16 14:00
函数定义为: WCHAR* buffer=new WCHAR[30]; wsprintf(buffer, L\"*hardware\\\\hd000\"); Install((LPTSTR)buffer,L\"inffile,inf\"); LPTSTR就是long pointer wide_char(T) string,要wchar_t的,就是用unicode啦。那个L可以不要,会自动转换的。 [编辑 - 8/16/02 by arthurtu] |
|
8楼#
发布于:2002-08-16 14:45
问题解决了,原因是用wsprintf(buffer,“”);时,buffer的结束位只有一位。
而实际是需要两位结束位。所以在使用buffer前应该先memset(buffer,0,sizeof(30))就可以了。 |
|
|
9楼#
发布于:2002-08-16 15:39
没有实质的解决问题。
|
|
10楼#
发布于:2002-08-20 21:24
解决了,我觉得问题的关键是unicode需要两个结束符,而普通字符串只有一个,所以老是出错。
|
|
|
11楼#
发布于:2002-08-20 22:46
呵呵!说错了一点啊!UNICODE的结束符是一个wchar的0,而ansi str的是一个byte的0
|
|
12楼#
发布于:2002-08-20 22:48
不过我觉得你说的这个解决好象还是不对啊!
按照你说的LPTSTR 是一个wchar的指针,那么应该 Install(L\"*hardware\\hd000\",L\"inffile.inf\")才对的啊! |
|
13楼#
发布于:2002-08-21 08:38
不过我觉得你说的这个解决好象还是不对啊! 我是这样定义的。 char *buffer = new char[30]; memset(buffer,0,30*sizeof(char));//关键是加了这一句。 wsprintf(buffer,\"*hardwar\\\\hd%d%d%d\",a,b,c); Install(buffer,\"inffile.inf\"); |
|
|
14楼#
发布于:2002-08-21 09:32
解决了,我觉得问题的关键是unicode需要两个结束符,而普通字符串只有一个,所以老是出错。 unicode每个字符都是两个byte,当然他的结束null也是两个,是个word的0 在需要unicode string的函数,如果你直接给个string常量,会自己转换的。 |
|
15楼#
发布于:2002-08-21 09:34
我觉得还是不对的啊!你这里能够正确很有可能是碰巧了!但是我觉得应该按照我说的那样处理才对的!有可能是在你使用Install的第二个参数的时候可能一些函数起到了兼容ANSI STR和UNICODE 的作用
|
|
16楼#
发布于:2002-08-21 09:40
[quote]不过我觉得你说的这个解决好象还是不对啊! 我是这样定义的。 char *buffer = new char[30]; memset(buffer,0,30*sizeof(char));//关键是加了这一句。 wsprintf(buffer,\"*hardwar\\\\hd%d%d%d\",a,b,c); Install(buffer,\"inffile.inf\"); [/quote] 改成 WCHAR *buffer = new WCHAR[30]; ... 或 TCHAR... 在某处 #define _UNICODE 和 #define UNICODE programming windows 2000(是这个书名吧?:))对unicode介绍了不少,好好看看。 |
|
17楼#
发布于:2002-08-21 09:42
[quote][quote]不过我觉得你说的这个解决好象还是不对啊! 我是这样定义的。 char *buffer = new char[30]; memset(buffer,0,30*sizeof(char));//关键是加了这一句。 wsprintf(buffer,\"*hardwar\\\\hd%d%d%d\",a,b,c); Install(buffer,\"inffile.inf\"); [/quote] 改成 WCHAR *buffer = new WCHAR[30]; ... 或 TCHAR... 在某处 #define _UNICODE 和 #define UNICODE programming windows 2000(是这个书名吧?:))对unicode介绍了不少,好好看看。 [/quote] ok,多谢指点。 搬把小凳子仔细听大佬讨论。 :D |
|
|
18楼#
发布于:2002-08-21 13:33
让你瞎猫碰到死耗子了。:)
|
|