beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1916回复:18

再问关于宽字符。

楼主#
更多 发布于:2002-08-16 09:58
函数定义为:
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的?
只要能解决问题,就一定给分。 希望高手赐教!
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-08-16 10:47
再不顶就没了。
只要能解决问题,就一定给分。 希望高手赐教!
ARRON
驱动老牛
驱动老牛
  • 注册日期2002-03-18
  • 最后登录2010-05-02
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望21点
  • 贡献值0点
  • 好评度10点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-08-16 11:25
帮你定定吧 :D
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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\")成功!

郁闷呀,怎么会有这样的事?
只要能解决问题,就一定给分。 希望高手赐教!
caosuricheng
驱动中牛
驱动中牛
  • 注册日期2002-04-16
  • 最后登录2004-09-04
  • 粉丝0
  • 关注0
  • 积分-10分
  • 威望-1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-08-16 11:35
函数定义为:
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的?

LPTSTR 的类型在MSDN里面怎么没有呢??? :o :o :o
不成功的原因说具体点
我是草肃日成 有人认识我吗?
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-08-16 11:42
在INSTALL中的这个函数出错错误是87(参数错误)
SetupDiSetDeviceRegistryProperty(DeviceInfoSet,
        &DeviceInfoData,
        SPDRP_HARDWAREID,
        (LPBYTE)HardwareId,
        (lstrlen(HardwareId)+1+1)*sizeof(TCHAR))
只要能解决问题,就一定给分。 希望高手赐教!
dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
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
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2002-08-16 14:00
函数定义为:
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的?

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]
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-08-16 14:45
问题解决了,原因是用wsprintf(buffer,“”);时,buffer的结束位只有一位。
而实际是需要两位结束位。所以在使用buffer前应该先memset(buffer,0,sizeof(30))就可以了。
只要能解决问题,就一定给分。 希望高手赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2002-08-16 15:39
没有实质的解决问题。
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-08-20 21:24
解决了,我觉得问题的关键是unicode需要两个结束符,而普通字符串只有一个,所以老是出错。
只要能解决问题,就一定给分。 希望高手赐教!
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-08-20 22:46
呵呵!说错了一点啊!UNICODE的结束符是一个wchar的0,而ansi str的是一个byte的0
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-08-20 22:48
不过我觉得你说的这个解决好象还是不对啊!
按照你说的LPTSTR 是一个wchar的指针,那么应该
Install(L\"*hardware\\hd000\",L\"inffile.inf\")才对的啊!
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-08-21 08:38
不过我觉得你说的这个解决好象还是不对啊!
按照你说的LPTSTR 是一个wchar的指针,那么应该
Install(L\"*hardware\\hd000\",L\"inffile.inf\")才对的啊!


我是这样定义的。
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\");
只要能解决问题,就一定给分。 希望高手赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
14楼#
发布于:2002-08-21 09:32
解决了,我觉得问题的关键是unicode需要两个结束符,而普通字符串只有一个,所以老是出错。

unicode每个字符都是两个byte,当然他的结束null也是两个,是个word的0
在需要unicode string的函数,如果你直接给个string常量,会自己转换的。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-08-21 09:34
我觉得还是不对的啊!你这里能够正确很有可能是碰巧了!但是我觉得应该按照我说的那样处理才对的!有可能是在你使用Install的第二个参数的时候可能一些函数起到了兼容ANSI STR和UNICODE 的作用
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
16楼#
发布于:2002-08-21 09:40
[quote]不过我觉得你说的这个解决好象还是不对啊!
按照你说的LPTSTR 是一个wchar的指针,那么应该
Install(L\"*hardware\\hd000\",L\"inffile.inf\")才对的啊!


我是这样定义的。
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介绍了不少,好好看看。
beaveror
驱动中牛
驱动中牛
  • 注册日期2002-06-13
  • 最后登录2003-07-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-08-21 09:42
[quote][quote]不过我觉得你说的这个解决好象还是不对啊!
按照你说的LPTSTR 是一个wchar的指针,那么应该
Install(L\"*hardware\\hd000\",L\"inffile.inf\")才对的啊!


我是这样定义的。
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
只要能解决问题,就一定给分。 希望高手赐教!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2002-08-21 13:33
让你瞎猫碰到死耗子了。:)
游客

返回顶部