C++ 将字符串发送到void
我正在使用需要MFC的SDK编写一个图像采集GUI。我对C++中的MFC并不十分熟悉,但我已经足够远地创建一个目录选择器来保存文件。问题是我制作的MFC按钮返回TCHAR,SDK需要const char*作为输入。当我运行程序时,图像被发送到VS解决方案所在的目录,而不是我指定的路径 我将包括以下代码:C++ 将字符串发送到void,c++,mfc,C++,Mfc,我正在使用需要MFC的SDK编写一个图像采集GUI。我对C++中的MFC并不十分熟悉,但我已经足够远地创建一个目录选择器来保存文件。问题是我制作的MFC按钮返回TCHAR,SDK需要const char*作为输入。当我运行程序时,图像被发送到VS解决方案所在的目录,而不是我指定的路径 我将包括以下代码: void CGrabDlg::OnGrab() { m_statusWnd.SetWindowText("Grabing..."); if(m_Xfer->Grab())
void CGrabDlg::OnGrab()
{
m_statusWnd.SetWindowText("Grabing...");
if(m_Xfer->Grab())
{
UpdateMenu();
// TODO: Add your control notification handler code here
int m_StartFrame;
const char* m_Options="-format tiff";
int fileCount=1;
while(fileCount<10)
{
CString counter; //file counter
CString image = "image";
counter.Format("%03d",fileCount);
CString imageType = ".tiff";
CString fileName = pathName + image + counter + imageType;
const char* x = (LPCTSTR) fileName;
fileCount++;
m_StartFrame = (m_Buffers == NULL) ? 0 : m_Buffers->GetIndex();
m_Buffers->Next();
m_Buffers->Save(x, m_Options);
m_statusWnd.SetWindowText(pathName);
}
}
}
窗口文本返回正确的路径目录(m_statusWnd.SetWindowText(szPathName);),但当我尝试将路径附加到要保存到映像的最终输入时,它无法出现(CString fileName=pathName+image+counter+imageType;)
const char*x=(LPCTSTR)文件名
这种类型转换只有在您的项目为ANSI编译时才有效,其中TCHAR
映射到char
。如果改用Unicode编译,TCHAR
将映射到wchar\u t
,并且不能将wchar\u t*
分配给char*
,必须使用WideCharToMultiByte()
将数据从UTF-16转换为ANSI
您正在将szPathName
分配给本地temppathName
变量,该变量不同于此语句中使用的pathName
变量:
m_statusWnd.SetWindowText(pathName);
CString fileName=路径名+图像+计数器+图像类型
因此,本声明:
m_statusWnd.SetWindowText(pathName);
应该显示一个空白字符串
因此,filename
将永远不会收到使用SHBrowseForFolder()
选择的路径。它的值将以image
变量开始,使生成的fileName
值相对于调用进程的当前工作目录,这解释了文件相对于VS解决方案文件夹被保存的原因
您需要更改此行:
CString pathName = szPathName;
对此,请改为:
pathName = szPathName;
因此,您正在将
szPathName
分配给CGrabDlg
类的pathName
成员。如果通过程序进行调试,会发生什么?路径片段之间是否存在正确的路径分隔符?在CGrabDlg::OnGrab
中使用的pathName
是什么?在哪里声明,在哪里初始化?它显然不是CGrabDlg::OnBnClickedChooseDir
中的pathName
中的同一个变量-其中一个是局部变量。@Igor我在头文件中将其声明为公共CString,这两个函数都在同一个cpp文件中。虽然这可能是因为我很密集。行CString pathName=szPathName
定义了一个局部变量,与CGrabDlg::pathName
成员变量无关(我假设它存在,但您的代码没有显示它)。局部变量已初始化,但以后永远不会使用。成员变量从未被碰过,很可能包含一个空字符串。@如果您是对的,我犯了一个本应很快解决的愚蠢错误,但由于某种原因,我花了太长时间才弄清楚。谢谢您,这是我犯的一个愚蠢的错误。我还必须在文件名后面附加路径名+“\\”+图像+计数器+图像类型;但它现在起作用了!查看、、和其他相关函数。
pathName = szPathName;