L"aaaa" 之类的字符串应该怎么定义?

时间:2021-01-28 02:47:24
有一个函数,能正确执行:
AddSourceFilter(L"d:\\media\\avi\\skiing.avi",L"Source Filter",&pSrc);

现在我要将CString str作为第一个参数放到此函数中去。应该做哪些类型转换,才能编译通过?

13 个解决方案

#1


好像getfilename ?

#2


USES_CONVERSION;

AddSourceFilter(A2T((LPCTSTR)strFilePath),L"Source Filter",&pSrc);

#3


这样:
BSTR bstr1 = str1.AllocSysString;
BSTR bstr2 = str2.AllocSysString;
AddSourceFilter( bstr1 , bstr2 , &pSrc);
当然用了以后要释放bstr1和bstr2占用的内存:
SysFreeString(bstr1);
SysFreeString(bstr2);

#4


你要不就定义UNICODE全局宏
要不就把你的str用MultiByteToWideChar 转换成Unicode字符串

#5


关注中。。。。。。。。。。。。。

#6


字符串前缀"L",表示它是一个UNICODE双字节的字符串,也即,字符串中的每个字符占用两个字节。
如果你的程序预定义了"_UNICODE"和"UNICODE",那么,程序中任何用到字符串的地方都应该有"L"前缀。但是如果你不定义_UNICODE和UNICODE时,又必须将"L"前缀去掉。

MFC通常就用一个"_T"(或者"TEXT")宏来包含这两种情况,只要你在字符串上用_T宏,那么无论你是否定义_UNICODE,编译器自动为你加上或者去掉"L"前缀。

同样的道理,TCHAR,LPTSTR,LPCTSTR等都是双重意义的宏,分别用以代替char,char*和 const char*。这类定义是当_UNICODE定义时,被解释成双字节字符串,而不定义时,被解释成单字节字符串。

由于CString提供了LPCTSTR强制操作符,所以它可以直接被当作一个LPCTSTR字符串用而无需转换。所以AddSourceFilter(str);就完全可以了

#7


对不起,我没说清楚,
cannot convert parameter 1 from 'class CString' to 'const unsigned short *'怎么解决?

#8


关注。

#9


char* OleDBCom::UnsignedShortToCharp(unsigned short *strU)

UINT  nStrULength=WideCharToMultiByte(
CP_ACP,0,strU,-1,NULL,NULL,NULL,NULL);
LPSTR lpStr;
lpStr=(char*)malloc(nStrULength); 
  WideCharToMultiByte(CP_ACP,0,strU,-1,lpStr,nStrULength,NULL,NULL);
    return lpStr;
}

#10


char t[] = "L\"aaaaaa\"";

#11


sorry, see this
( LPCTSTR )thecstring

#12


WCHAR wch=L"aaaaa";

#13


sorry,到现在才结贴
发现使用USES_CONVERSION和A2W是一个办法
再次谢谢各位

#1


好像getfilename ?

#2


USES_CONVERSION;

AddSourceFilter(A2T((LPCTSTR)strFilePath),L"Source Filter",&pSrc);

#3


这样:
BSTR bstr1 = str1.AllocSysString;
BSTR bstr2 = str2.AllocSysString;
AddSourceFilter( bstr1 , bstr2 , &pSrc);
当然用了以后要释放bstr1和bstr2占用的内存:
SysFreeString(bstr1);
SysFreeString(bstr2);

#4


你要不就定义UNICODE全局宏
要不就把你的str用MultiByteToWideChar 转换成Unicode字符串

#5


关注中。。。。。。。。。。。。。

#6


字符串前缀"L",表示它是一个UNICODE双字节的字符串,也即,字符串中的每个字符占用两个字节。
如果你的程序预定义了"_UNICODE"和"UNICODE",那么,程序中任何用到字符串的地方都应该有"L"前缀。但是如果你不定义_UNICODE和UNICODE时,又必须将"L"前缀去掉。

MFC通常就用一个"_T"(或者"TEXT")宏来包含这两种情况,只要你在字符串上用_T宏,那么无论你是否定义_UNICODE,编译器自动为你加上或者去掉"L"前缀。

同样的道理,TCHAR,LPTSTR,LPCTSTR等都是双重意义的宏,分别用以代替char,char*和 const char*。这类定义是当_UNICODE定义时,被解释成双字节字符串,而不定义时,被解释成单字节字符串。

由于CString提供了LPCTSTR强制操作符,所以它可以直接被当作一个LPCTSTR字符串用而无需转换。所以AddSourceFilter(str);就完全可以了

#7


对不起,我没说清楚,
cannot convert parameter 1 from 'class CString' to 'const unsigned short *'怎么解决?

#8


关注。

#9


char* OleDBCom::UnsignedShortToCharp(unsigned short *strU)

UINT  nStrULength=WideCharToMultiByte(
CP_ACP,0,strU,-1,NULL,NULL,NULL,NULL);
LPSTR lpStr;
lpStr=(char*)malloc(nStrULength); 
  WideCharToMultiByte(CP_ACP,0,strU,-1,lpStr,nStrULength,NULL,NULL);
    return lpStr;
}

#10


char t[] = "L\"aaaaaa\"";

#11


sorry, see this
( LPCTSTR )thecstring

#12


WCHAR wch=L"aaaaa";

#13


sorry,到现在才结贴
发现使用USES_CONVERSION和A2W是一个办法
再次谢谢各位