LPWSTR和char*是啥关系,这段代码求解决问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LPWSTR和char*是啥关系,这段代码求解决问题相关的知识,希望对你有一定的参考价值。
已知
#define LPTSTR LPWSTR
有段代码如下
#include <windows.h>
char szSelfName[MAX_PATH] = 0 ;
GetModuleFileName(NULL, szSelfName, MAT_PATH);
书上代码就是这样的,GetModuleFileName的第二个参数要求LPWSTR类型,下划线报错说char*和LPWSTR类型不兼容(百度百科说char*和LPWSTR就是同样的类型,纠结~),于是我把代码第二行改成LPWSTR szSelfName;但是到后来要求把szSelfName和一个字符串(const char)拼接,LPTSTR是指针类型,不能用运算符直接拼接,strcat也不行,网上找到个方法说是把szSelfName强制转换为string,也就是string(szSelfName),结果这样又提示string没有对应类型的构造函数。
问题就是需要这个类型,既要能够做GetModuleFileName的第二个参数(LPWSTR类型)又能和一个const char类型的字符串拼接,求解决
PS:书上的例程是VC6.0的,我的开发环境是VS2012,好像C++对数据类型的要求越来越严格了
这里你有一个误区,注意看下面代码(VC标准源文件代码):
#ifdef UNICODEtypedef WCHAR TCHAR
#define GetModuleFileName GetModuleFileNameW
#else
typedef char TCHAR
#define GetModuleFileName GetModuleFileNameA
#endif // !UNICODE
包括LPTSTR TCHAR等都是这样定义的,字符串的T字头,就是自适应UNICODE。
这样就推荐在程序中,使用T字头,而不要使用char LPSTR,也不要使用UNICODE的WCHAR LPWSTR,这样的程序没有编码适应性。
因此你的程序,char的声明修改一下就可以了:
TCHAR szSelfName[MAX_PATH] = _T("");这样,无论是UNICODE编码模式(2012默认)还是ANSI编码模式(VC6默认)都可以无误编译运行。
js问题,动态增加select里的option,求问为啥这段代码不执行?求大神指教!
<script>
// 动态添加select中的项option:
function addOneOption()
var optionlist = new Array();
<%
String[] arrlist = (String[]) request.getAttribute("optionlist"); //调用servlet传来的数组
if(null != arrlist)
for(int i = 0; i < arrlist.length; i++)
%> optionlist[<%=i%>]=<%=arrlist[i]%>;
<%
%>
var selectObj=document.getElementById("user_dm");
var option = document.createElement("option");
for(var t = 0 ;t < optionlist.length;t++)
option.value=optionlist[t];
option.innerHTML = t;
selectObj.appendChild(option);
</script>
====================================
<body>
<select id="user_dm" name="user_dm">
</select><br>
<input type="button" onClick="addOneOption()" value="添加">
</body>
本来添加单个option就行的,加了上面那段java代码就不执行了。
java 代码 是后台执行 , 在前台 是无法执行的 ,
如果要从后台获取数据 要使用ajax的方式 在回调函数里面增加选项
function addOneOption()$ajax(
url:url,
success:function(data)
var optionlist = eval(\'(\' +data + \')\');
var selectObj=document.getElementById("user_dm");
var option = document.createElement("option");
for(var t = 0 ;t < optionlist.length;t++)
option.value=optionlist[t];
option.innerHTML = t;
selectObj.appendChild(option);
,
);
var selectObj=document.getElementById("user_dm");
var option = document.createElement("option");
for(var t = 0 ;t < optionlist.length;t++)
option.value=optionlist[t];
option.innerHTML = t;
selectObj.appendChild(option);
</script>
====================================
<body>
<select id="user_dm" name="user_dm">
</select><br>
<input type="button" onClick="addOneOption()" value="添加">
</body> 参考技术A 写的什么乱七八糟的,自己右键查看源文件,看看生成的什么东西再说追问
上面java代码单独拿出来能成功执行,optionlist能获取一个数组。下面的js代码如果删掉上面的java也能成功执行,动态增加select的子项option,加在一起就不成功了。我就是要把数组里的值作为新增option的值
以上是关于LPWSTR和char*是啥关系,这段代码求解决问题的主要内容,如果未能解决你的问题,请参考以下文章
“char *”类型的参数与“LPWSTR”类型的参数不兼容
如何在 vc++ 中将 char* 转换为 LPWSTR..........................? [复制]