当前位置:编程学习 > C#/ASP.NET >>

[求助]不能将参数 从“const CString”转换为“const char *”

// 弄了半天都没弄出来,各位大侠救命啊~!一共涉及到3个函数:
// 第一函数是处理OpenFileButtion的函数,其中调用CreateGraph(strSourceFile)函数,把要打开文件的路径传递给
// strSourceFile
void CMyPlayerDlg::OnBnClickedOpenfileButton()
{
// TODO: 在此添加控件通知处理程序代码
CString strFilter=_T(
"Move File(*.mpg;*.mpeg;*.rmvb;*.avi)|\
*.mpg;*.mpeg;*.rmvb;*.avi|\
Audio Files(*.wav;*mp3;*.mpa;*.mpu;*.au)|\
*.wav;*mp3;*.mpa;*.mpu;*.au|\
MidiFiles(*.mid;*.midi;*.rmi)|\
*.mid;*.midi;*.rmi||");
CFileDialog dlgOpen(TRUE, NULL, NULL, OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, strFilter, this);
if(IDOK == dlgOpen.DoModal())
{
CString strSourceFile = dlgOpen.GetPathName();
// Rebuild the file playback filter graph
CMyPlayerDlg::CreateGraph(strSourceFile);
GetDlgItem(IDC_OPENFILE_BUTTON)->EnableWindow(FALSE);
GetDlgItem(IDC_PLAY_BUTTON)->EnableWindow(TRUE);
}
}

// 第二个函数,问题就出在RenderFile(strSourceFile)函数
void CMyPlayerDlg::CreateGraph(const CString& strSourceFile)
{
DestroyGraph();
m_pFileterGraph = new CDXGraph();
if(m_pFileterGraph->Create())
{
// Render the source clip
m_pFileterGraph->RenderFile(strSourceFile);
// Set video window and notification window
m_pFileterGraph->SetDisplayWindow(mVideoWindow.GetSafeHwnd());
m_pFileterGraph->SetNotifyWindow(this->GetSafeHwnd());
// Show the fist frame
m_pFileterGraph->Pause();
}
}

// 第三个函数,第二个函数试图将CString类型的变量传递给char*类型,就出问题了,咋办啊?
bool CDXGraph::RenderFile(const char* inFile)
{
if(m_pGraph)
{
WCHAR szFilePath[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, inFile, -1, szFilePath, MAX_PATH);
if(SUCCEEDED(m_pGraph->RenderFile(szFilePath, NULL)))
{
return true;
}
}
return false;
} --------------------编程问答-------------------- 各位叔叔阿姨,哥哥姐姐,弟弟妹妹们,各位大侠高手们,救命啊~~~~~~~~~~~~~~~~~~~~~~~!!!
help me!
请各位可怜可怜我这个孤独无助,叫天天不应,叫地地不灵,躲在角落里,双膝跪地,上身前倾,两眼充满泪花,望眼欲穿,伸手求助的神菜鸟。 --------------------编程问答-------------------- 你大概是在多线程调用吧? --------------------编程问答-------------------- 注意编码vs2005以上,mfc 项目默认是unicode , --------------------编程问答-------------------- 我刚学C++.net,谢谢两位的帮助。
我在unicode和多字节字符集都试过,
在Unicode下出现这样的错误提示:
不能将参数 1 从“const CString”转换为“const char *”
在多字节字符集下出现这样的错误提示:
不能将参数 1 从“const wchar_t *”转换为“LPCTSTR” --------------------编程问答-------------------- 在m_pFileterGraph->RenderFile(strSourceFile),之前你可以这样写:
char filepath[MAX_PATH] = {0};
WideCharToMultiByte(CP_ACP, 0, strSourceFile.GetBuffer(), -1, filepath, MAX_PATH);
m_pFileterGraph->RenderFile(filepath);
--------------------编程问答-------------------- CString str;

char *p=str.GetBuffer() --------------------编程问答-------------------- 同问同求啊 --------------------编程问答-------------------- 的确是unicode的问题;

如果是字符串常量在字符串前面直接加上L,比如 :
MessageBox(L"欢迎使用VC++"); --------------------编程问答-------------------- CString 转 char*
char*pChar = (char*)(LPCSTR)str; --------------------编程问答-------------------- // CStringToChar.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <atlstr.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
//return 0;
//CString str,str1;
//str = _T("Hello World");
//char* m_Char;
 //   LPCTSTR  p;
 //   p = str;
////cout<<p<<endl;
//wprintf(_T("%s"),p);



//CString str,str1;
//str = "Hello World";
//TCHAR* m_Char;
//m_Char = new TCHAR [str.GetLength()];
//m_Char = str.GetBuffer();
////cout<<p<<endl;
//for (int i = 0;i<str.GetLength();++i)
//{
// wprintf(_T("%s\n"),m_Char++);
//}


//CString str,str1;
//str = "Hello World";
//char* m_Char;
//m_Char = new char [str.GetLength()];
//m_Char = (LPSTR)(LPCTSTR)str;
 //   wprintf(_T("%s\n"),m_Char);

//CString str,str1;
//str = "Hello World";
//char m_Char[20];
//strcpy(m_Char,(LPSTR)(LPCTSTR)str);

//wprintf(_T("%s\n"),m_Char);
//wprintf(_T("%s\n"),str);

//CString str,str1;
//str = "Hello World";
//char* m_Char[20];
//m_Char[0] = (LPSTR)(LPCTSTR)str;
 //   wprintf(_T("%s\n"),m_Char[0]);


//CString str = "1234";
//cout<<str<<endl;


system("pause");


}


我前一阵子调得CString和CHAR转换的代码 还没写完 没时间写了 你可以参考一下 每一部分都好用得 --------------------编程问答-------------------- 这样在不给分 就砸你家玻璃去 --------------------编程问答--------------------
引用 4 楼 wuwei509 的回复:
我刚学C++.net,谢谢两位的帮助。
我在unicode和多字节字符集都试过,
在Unicode下出现这样的错误提示:
不能将参数 1 从“const CString”转换为“const char *”
在多字节字符集下出现这样的错误提示:
不能将参数 1 从“const wchar_t *”转换为“LPCTSTR”


不要用unicode和多字节字符集,直接选择“未设置” --------------------编程问答--------------------  
dongfangbuba

就不明白了,你这是怎么做了?我那就是那样写的,但是仍然报错!!! --------------------编程问答-------------------- 将一个编辑框中的字符串转换成char类型数据
CWnd* pwnd = NULL;
char ch[100] = {0};
TCHAR* ptch = new TCHAR[100];
CString szTemp;

pwnd = GetDlgItem(IDC_EDIT1); 
pwnd->GetWindowText(szTemp); // 取编辑框中的内容
ptch = szTemp.GetBuffer(szTemp.GetLength()); // 将字符串转换成宽字符
WideCharToMultiByte(CP_ACP, WC_COMPOSITECHECK|WC_DEFAULTCHAR,
ptch , lstrlen(ptch ), 
ch, lstrlen(ch), 
NULL, NULL); // 将宽字符转换成窄字符

--------------------编程问答-------------------- 用csting的getbuffer --------------------编程问答-------------------- 你不会是低版本拿来的代码,放在2005以上的版本中运行吧?那去看看他们之间的区别就知道错在哪了 --------------------编程问答-------------------- char* str;
CString str1;
str= (LPSTR)(LPCTSTR)str;
这是强制转换 --------------------编程问答--------------------
补充:.NET技术 ,  VC.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,