| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10317 人关注过本帖
标题:求CString转const char *的有效办法
只看楼主 加入收藏
theblur
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-8-29
收藏
 问题点数:0 回复次数:8 
求CString转const char *的有效办法
我在学习OpenCV和MFC的编程,已经正确安装了OpenCV和VS2005。一个简单的任务是用对话窗打开一个JPG或BMP文件,有关按钮“打开”功能的OnOpen函数如下:
----------------------------
void CcvisionDlg::OnOpen()
{
CFileDialog dlg(TRUE, _T("*.bmp"), _T(""),OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST|OFN_HIDEREADONLY,_T("Image Files (*.bmp; *.jpg) |*.bmp;*.jpg|AVI Files (*.avi) |*.avi|All Files (*.*)|*.*||")); // file types to open

LPCWSTR title= {_T("Open Image")}; //name of button

dlg.m_ofn.lpstrTitle = title;

if (dlg.DoModal() == IDOK) {

CString path= dlg.GetPathName(); // contain the selected filename

const size_t newsize = 100;
char str [newsize];
strcpy_s(str, path); //convert: CString -> const char*

ImageProcessor ip (str); // load, create and display
}

}
----------------------------------------------
问题的症状是图片窗口已经打开,但是没有图片显示,显然选择的图片地址没有被正确地传递到加载图片的函数。GetPathName()是MFC函数,返回选中的图片地址,是CString格式;然后将这个地址传递到ImageProcessor ip(),后者是OpenCV的ImageProcessor类的对象,该类的作用是加载、显示选中的图象,但是要求的参数(也就是图片地址)是const char *,我试图转变字符串类型(就是从变量path到str),但报错如下:
-----------------------------------------------
error C2665: 'strcpy_s' : none of the 2 overloads could convert all the argument types
C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(72): could be 'errno_t strcpy_s<100>(char (&)[100],const char *)'
while trying to match the argument list '(char [100], CString)'
----------------------------------------------
这个转型方法是微软提供的:msdn2.microsoft.com/en-us/library/ms235631
其他方法我也试过,包括强转,都不管用。请帮忙看看怎么回事?
搜索更多相关主题的帖子: CString char const 办法 
2006-08-30 09:47
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

wchar_t str[newsize];
lstrcpy(str, path);


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-30 13:07
theblur
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-8-29
收藏
得分:0 
用楼上的方法,报错如下:
-----------------------------------
Error 2 error C2664: 'ImageProcessor::ImageProcessor(const char *,bool)' : cannot convert parameter 1 from 'wchar_t [100]' to 'const char *'
-----------------------------------
2006-08-31 01:07
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

沒看到你 ImageProcess 的引數...
可以這樣:
LPSTR str = new char[newsize];
// char str[newsize];
wsprintfA(str, "%ls", path); // or path.GetString()
ImageProcess(str, true);
---------------------------------------------------------------------------------
ps. newsize 定義爲 100 可能會少, 可以定義爲 MAX_PATH


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-31 02:38
Bekky
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:354
专家分:0
注 册:2006-5-29
收藏
得分:0 

[QUOTE]你可以这样转,假如:你的CString变量为strTemp,char * pStr;
那么就可以这样:pStr = strTemp.GetBuffer(strTemp.GetLength());
这是我常用的方法,呵呵
好像有点绕![/QUOTE]


我的编译环境为WinXp + VC 6.0 http://blog..cn/yobo
2006-08-31 09:00
yeshirow
Rank: 4
等 级:贵宾
威 望:10
帖 子:854
专家分:0
注 册:2006-6-8
收藏
得分:0 

在 VC6 這是可行的, 甚至不必要顯示寫轉換代碼 (不知道在 2003 行不行)
在 VS2005 就不可以了, GetBuffer 同樣是轉換成 PCXSTR, 都是針對 wchar_t 的


原來朋友仔感情再天真, 亦是我永遠也會愛惜的人, 明日愛他人, 也記住學會不要緊; 原來朋友比戀人更高分, 亦讓我開始懂得不記恨, 若大家都敏感, 我更要永遠記得拒絕再因小事怪人, 爲何沒有這條校訓...Twins-朋友仔 MCSD Training
2006-08-31 11:42
Bekky
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:354
专家分:0
注 册:2006-5-29
收藏
得分:0 
[QUOTE]我用的式VC6,呵呵。。。
我还没升级到2003或2005,老古董,呵呵。[/QUOTE]

我的编译环境为WinXp + VC 6.0 http://blog..cn/yobo
2006-08-31 11:50
theblur
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-8-29
收藏
得分:0 
yeshirow: 彻底服了!你解决了难题!!叫你一声大姐!!!图片出来了,吼吼~~

但是我彻底被搞混了,还得仔细研究一下,这些字符串的结构到底是怎么样的……

还是感谢 ;)
2006-09-01 07:26
眼底星空
Rank: 4
等 级:业余侠客
威 望:3
帖 子:85
专家分:289
注 册:2006-9-2
收藏
得分:0 

不是可以用LPCTSTR直接转换吗?
CString strText;
const char* pstr;
pstr = (LPCTSTR)strText;


无为而为 && 每天进步一小点...
2006-09-02 15:43
快速回复:求CString转const char *的有效办法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029931 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved