这个函数的参数,该怎么转换类型(从CString 到char*)

angel725 2013-02-14 01:49:47
WriteFile(char* Path,char* byteSize);(这个函数在dll里)
第一个是当前程序目录,CString path,我用GetModuleFileName(NULL,szPATH.GetBufferSetLength(MAX_PATH),MAX_PATH);取的。

第二个是写入的内容,从文本框里取内容赋值给控件关联变量m_txt,类型为CString。
类型和函数的参数不同,

我试着用WideCharToMultiByte转成char*。但最后总是出错,运行总是出错。
这两个该怎么传参呢?能给个例子吗?

而且,转完的变量不能传参,要直接写(比如第一个参数直接写成”C:\t.txt")才能传进去
用我转完的变量传进去的只是空值(一串0)

估计是转换错了吧, 要怎么转?

谢谢
...全文
224 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
angel725 2013-02-14
  • 打赏
  • 举报
回复
引用 4 楼 shit_moment 的回复:
不想用ATL的话,那就用WideCharToMultiByte转换吧 用法msdn或baidu一下就知道了 引用 3 楼 shit_moment 的回复:你这个是unicode到multibyte转换出错 可以用ATL的宏 C/C++ code?123456789101112131415CString szPATH;CString str; GetModule……
谢谢,用ATL可以转,也得到正确的结果。 我之前就是用WideCharToMultiByte转的,转完的变量不能传参,传进去的只是一串0

WideCharToMultiByte(CP_ACP,0,pFileName.GetBuffer(),-1,(LPSTR)charPATH,MAX_PATH,NULL,NULL);
WideCharToMultiByte(CP_ACP,0,str.GetBuffer(),-1,(LPSTR)charSTR,MAX_PATH,NULL,NULL);
唯恐天下不乱 2013-02-14
  • 打赏
  • 举报
回复
不想用ATL的话,那就用WideCharToMultiByte转换吧 用法msdn或baidu一下就知道了
引用 3 楼 shit_moment 的回复:
你这个是unicode到multibyte转换出错 可以用ATL的宏 C/C++ code?123456789101112131415CString szPATH;CString str; GetModuleFileName(NULL,szPATH.GetBufferSetLength(MAX_PATH),MAX_PATH);szPATH.ReleaseBuffer(……
唯恐天下不乱 2013-02-14
  • 打赏
  • 举报
回复
你这个是unicode到multibyte转换出错 可以用ATL的宏
	CString szPATH;
	CString str;

	GetModuleFileName(NULL,szPATH.GetBufferSetLength(MAX_PATH),MAX_PATH);
	szPATH.ReleaseBuffer();
	int pos = szPATH.ReverseFind(_T('\\'));
	szPATH = szPATH.Left(pos);        
	CString pFileName = szPATH + _T("\\temp.txt");   

	USES_CONVERSION;
	char* TempPath=T2A(pFileName.GetBuffer()); //这里的pFileName下面有错误
	UpdateData(1);
	str=m_text;
	char* charStr=T2A(str.GetBuffer());  //这里的str下面有错误
	WriteFile(TempPath,charStr);
引用 2 楼 angel725 的回复:
引用 1 楼 shit_moment 的回复:GetString()返回const char*,GetBuffer()返回char* C/C++ code?123CString str;const char* cp = str.GetString();char* p = str.GetBuffer(); 不行。 C/C++ code?1234567891011121……
angel725 2013-02-14
  • 打赏
  • 举报
回复
引用 1 楼 shit_moment 的回复:
GetString()返回const char*,GetBuffer()返回char* C/C++ code?123CString str;const char* cp = str.GetString();char* p = str.GetBuffer();
不行。

    CString szPATH;
    CString str=NULL;

    GetModuleFileName(NULL,szPATH.GetBufferSetLength(MAX_PATH),MAX_PATH);
    szPATH.ReleaseBuffer();
    int pos = szPATH.ReverseFind('\\');
    szPATH = szPATH.Left(pos);        
    CString pFileName = szPATH + "\\temp.txt";   

	char* TempPath=pFileName.GetBuffer(); //这里的pFileName下面有错误
	UpdateData(1);
	str=m_text;
	char* charStr=str.GetBuffer();  //这里的str下面有错误
        WriteFile(TempPath,charStr);
两上错误都是: IntelliSense: "LPWSTR" 类型的值不能用于初始化 "char *" 类型的实体 编译时错误是: “error C2440: “初始化”: 无法从“wchar_t *”转换为“char *” 1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换”
唯恐天下不乱 2013-02-14
  • 打赏
  • 举报
回复
GetString()返回const char*,GetBuffer()返回char*
CString str;
const char* cp = str.GetString();
char* p = str.GetBuffer();

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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