求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
其他方法我也试过,包括强转,都不管用。请帮忙看看怎么回事?