如题。(Delphi2009)
我的报错代码是:
SetString(Result, StrRet.cStr, lStrLen(StrRet.cStr));
我尝试使用SetString(Result, StrRet.cStr, lStrLen(PWideChar(StrRet.cStr)));仍然报错:(相关结构和函数:
procedure SetString(var s: string; buffer: PChar; len: Integer);//system.pasfunction lstrlen; external kernel32 name 'lstrlenW';
Syntax
int lstrlen(
LPCTSTR lpString
);
Parameters
lpString
[in] Pointer to a null-terminated string.
Return Value
The return value specifies the length of the string, in TCHAR values. This refers to bytes for ANSI versions of the function or WCHAR values for Unicode versions. If lpString is NULL, the return value is 0.StrRet是TStrRet类型。TStrRet的定义如下:
type
{ record for returning strings from IShellFolder member functions } PSTRRet = ^TStrRet;
{$EXTERNALSYM _STRRET}
_STRRET = record
uType: UINT; { One of the STRRET_* values }
case Integer of
0: (pOleStr: LPWSTR); { must be freed by caller of GetDisplayNameOf }
1: (pStr: LPSTR); { NOT USED }
2: (uOffset: UINT); { Offset into SHITEMID (ANSI) }
3: (cStr: array[0..MAX_PATH-1] of AnsiChar); { Buffer to fill in }
end;
TStrRet = _STRRET;请大侠指教,多谢!
我的报错代码是:
SetString(Result, StrRet.cStr, lStrLen(StrRet.cStr));
我尝试使用SetString(Result, StrRet.cStr, lStrLen(PWideChar(StrRet.cStr)));仍然报错:(相关结构和函数:
procedure SetString(var s: string; buffer: PChar; len: Integer);//system.pasfunction lstrlen; external kernel32 name 'lstrlenW';
Syntax
int lstrlen(
LPCTSTR lpString
);
Parameters
lpString
[in] Pointer to a null-terminated string.
Return Value
The return value specifies the length of the string, in TCHAR values. This refers to bytes for ANSI versions of the function or WCHAR values for Unicode versions. If lpString is NULL, the return value is 0.StrRet是TStrRet类型。TStrRet的定义如下:
type
{ record for returning strings from IShellFolder member functions } PSTRRet = ^TStrRet;
{$EXTERNALSYM _STRRET}
_STRRET = record
uType: UINT; { One of the STRRET_* values }
case Integer of
0: (pOleStr: LPWSTR); { must be freed by caller of GetDisplayNameOf }
1: (pStr: LPSTR); { NOT USED }
2: (uOffset: UINT); { Offset into SHITEMID (ANSI) }
3: (cStr: array[0..MAX_PATH-1] of AnsiChar); { Buffer to fill in }
end;
TStrRet = _STRRET;请大侠指教,多谢!
解决方案 »
- 换个标题吧--delphi多线程并发访问无锁队列怎么实现
- 组建大小,位置的改变函数
- 如何使用TWEbBrower控件动态得到网页中的内容和DIV属性?
- 谢谢
- delphi调用DLL中的函数,函数类型要一样吗?请大家看看
- 怎么实现把网页上的文字拖动到指定的文件里?!(象飓风浏览器的文本拖动功能!)
- 在DELPHI中如何检查内存泄漏,boundchecker如何用呀?
- 有没人知道通过写代码给paradox数据库加密码/改密码?讨论看看!!
- 数据库登陆密码怎么保存,我要在程序里面让用户可以修改密码,要单独的文件吗?急用!
- 怎样禁止在windwos的dos窗口中修改系统时间?
- 有做过网吧管理系统的吗,请教开发周期问题
- 关于memo的非常简单的问题!!
不过这里不知道你的cStr是不是unicode字符,如果不是的话,先转string再WideString(如果2009+则不用转WideString)最后PWideChar
并且顶楼有cStr结构: 3: (cStr: array[0..MAX_PATH-1] of AnsiChar); { Buffer to fill in } 是个AnsiChar数组。请问该怎么转换呢?我试了一些其他方法也不行:(