Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串发送到void_C++_Mfc - Fatal编程技术网

C++ 将字符串发送到void

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())

我正在使用需要MFC的SDK编写一个图像采集GUI。我对C++中的MFC并不十分熟悉,但我已经足够远地创建一个目录选择器来保存文件。问题是我制作的MFC按钮返回TCHAR,SDK需要const char*作为输入。当我运行程序时,图像被发送到VS解决方案所在的目录,而不是我指定的路径

我将包括以下代码:

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
分配给本地temp
pathName
变量,该变量不同于此语句中使用的
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;