关于CB中wchar_t类型的使用

py2166 2003-08-19 10:25:52
本人最近使用一个OCX控件开发,该控件的很多函数中都使用了wchar_t *类型,看例子该参数应该是字符串,但我用“adad”,编译老报错,说不能将char*转换成wchar_t *,应该怎么做?请各位老大指点。
...全文
109 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jasonCSH 2003-08-30
  • 打赏
  • 举报
回复
可以用wchar_t * m_pWC去获取 一些com函数传过来的数据。
比如有一个Com指针pPtr. 它有一个函数是GetContent(wchart_t * wcContent);
在给m_pWC分配好size后就可以使用pPtr->GetContent(m_pWC)去获取内容。

wchar_t m_pWC;
String sDest;
InitWCPtr();//初始化WCPtr
pPtr->GetContent(m_pWC);//由m_pWC去获取信息
WCToString(m_pWC,sDest);//转化为好用的String型
FreeWCPtr();//释放WCPtr




nightfallrove 2003-08-30
  • 打赏
  • 举报
回复
这一句是用来干嘛的?
strDest+=str;
还有m_pWC 好象都没用到,为什么???
jasonCSH 2003-08-29
  • 打赏
  • 举报
回复
关于该问题的体会。

我上面的帖子是由wchar_t * 转化为String的用法。
获取com等组件函数传过来的数据的时候常要使用wchar_t* 。
由String转化为wchar_t* 用String的成员函数WideChar就可以了。
jasonCSH 2003-08-29
  • 打赏
  • 举报
回复
我的解决办法
使用之前先要给wcSrc分配一定的内存大小sizeof。见下
具体多少可以根据程序的需要,不应该小于strDest.Lenth();
bool InitWCPtr()
{
m_pWC =
(wchar_t *)VirtualAlloc(NULL,SizeYouNeeded,MEM_COMMIT,PAGE_READWRITE);
if(!m_pWC) return false;
return true;
}
然后用函数转化为String
void WCToString(const wchar_t* wcSrc,String& strDest)
{
strDest="";
String str;
while(*wcSrc!='\0')
{
str.sprintf("%s",wcSrc++);
strDest+=str;
}
}
使用后要记得释放之。
void FreeWCPtr()
{
if(m_pWC) VirtualFree(m_pWC,0,MEM_RELEASE);
}
这种用法本人在BC5上正常使用.
yhz 2003-08-28
  • 打赏
  • 举报
回复
第一个问题:
void fun(wchar_t* wTest)
{
//do something. For example:
wprintf(L"%s", wTest);
}
wmain(void)
{
fun(L"abc");
}

另外,如果在运行时,你可以用两个 API 函数进行互换:
int MultiByteToWideChar(
UINT CodePage, // code page
DWORD dwFlags, // character-type options
LPCSTR lpMultiByteStr, // string to map
int cbMultiByte, // number of bytes in string
LPWSTR lpWideCharStr, // wide-character buffer
int cchWideChar // size of buffer
);//由 char* 转成 wchar_t*

int WideCharToMultiByte(
UINT CodePage, // code page
DWORD dwFlags, // performance and mapping flags
LPCWSTR lpWideCharStr, // wide-character string
int cchWideChar, // number of chars in string
LPSTR lpMultiByteStr, // buffer for new string
int cbMultiByte, // size of buffer
LPCSTR lpDefaultChar, // default for unmappable chars
LPBOOL lpUsedDefaultChar // set when default char used
);//由 wchar_t* 转成 char*
ljianq 2003-08-27
  • 打赏
  • 举报
回复
使用 WideString或BSTR;
如:WideString str="sdfsd";
BSTR str=SysAllocString(L"sdsf");

BSTR str=AnsiToOLESTR("asasdf");
dowhileprogramming 2003-08-25
  • 打赏
  • 举报
回复
关注。
我只知道wchar_t是两个字节一个守符,只是不知道怎么使用它。
另外,unicode的应用程序如果是console的话,主函数就是下面的样子:
int wmain(int argc, whar_t *argv[])
不知是怎么回事。
jerrymousenet2 2003-08-23
  • 打赏
  • 举报
回复
c_bstr();
COKING 2003-08-22
  • 打赏
  • 举报
回复
L“adad”
gloom 2003-08-20
  • 打赏
  • 举报
回复
WideString.c_bstr();
wenyongjie 2003-08-19
  • 打赏
  • 举报
回复
哈,和我一样的问题,帮你顶一下,顺便给你看一下我昨天开的帖子,知道了答案可要贴出来哟!
http://expert.csdn.net/Expert/topic/2159/2159269.xml?temp=.1376306
zcchm 2003-08-19
  • 打赏
  • 举报
回复
StringToWideChar()

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧