不能从'const char *'转换为'LPCTSTR'。
我正在尝试将字符串转换为'lpctstr',但是,我有以下错误. 错误: cannot convert from 'const char *' to 'LPCTSTR' 代码: std::string str = "helloworld"; LPCTSTR lp = str.c_str(); 也尝试: LPCTSTR lp = (LPCTSTR)str.c_str(); 但是,打印垃圾价值. 解决方案 LPCTSTR含义(长指向常数TCHAR字符串). a TCHAR可以根据您的项目设置为wchar_t或char. 如果在您的项目设置中,在"常规"选项卡中,您的字符集为"使用多字节字符集",则TCHAR是char的别名.但是,如果设置为"使用Unicode字符集",则TCHAR是wchar_t的别名. 您必须使用Unicode字符集,因此: LPCTSTR lp = str.c_str(); 实际上是: //
2 2023-12-06
编程技术问答社区
如何处理C++中的Unicode字符
我们在引擎中内置了一个评论系统,允许程序员对各种暴露变量/对象进行注释,然后GUI前端将其用于工具标记和帮助. 最近,某些工具标记开始崩溃,经过大量浪费的时间,我将其跟踪到了角色:’,除非我错误地错误,否则它是一个Unicode角色,在ASCII中不可用. 服用此答案考虑到这一点,我假设wstring可以解决问题.在更改较大项目之前,我创建了一个测试项目,以查看wstring是否可以解决问题.尽管该项目没有崩溃,但该行为的预期不wstring. #include #include using namespace std; int main() { string someString = "successive attack that DOESN’T result"; wstring someWString = L"successive attack that DOESN’T result"; cout
16 2023-11-20
编程技术问答社区
我们可以在Unix编译器中使用wmain(),还是只能在Windows上工作?
我们可以使用unix编译器使用wmain()函数,还是仅在Windows上使用? 解决方案 main的唯一标准签名是: int main(void); int main(int argc, char *argv[]); 但是,独立实现可以提供扩展/允许其他签名.但是,这些并不是便携式的. wmain看起来像Windows/vs的东西.在 *nix/gnu gcc. 其他解决方案 Windows中存在wmain签名来处理广泛的命令行参数.通常,虽然Windows应用程序更喜欢UTF16,但UNIX应用程序更喜欢UTF8对于Unicode字符串编码. UTF8使用常规char字符串,因此标准main签名足以满足Unicode-Aware Unix的适用. 如果要制作不需要Unicode命令行参数的便携式控制台应用程序,请使用main.如果您确实需要Unicode命令行参数,则需要预处理程序指令,以使签名适合每个环境. 如果您正在制作跨平台GUI应用程序,请使
12 2023-11-08
编程技术问答社区
在非统一编码的Delphi版本中,我如何构建一个带有二维码的WideString?
我正在尝试构建一个(test)WideString: á( 但使用其分解形式: 拉丁小字母A( u+0301 ) 所以我有代码片段: var test: WideString; begin test := #$0061#$0301; MessageBoxW(0, PWideChar(test), 'Character with diacratic', MB_ICONINFORMATION or MB_OK); end; 除了它似乎没有用: 此可以是我尝试过的其他一些变体: test := WideString(#$0061#$0301); const SmallLetterLatinAWithAcuteDecomposed: WideString = #$0061#$0301; test := SmallLetterLatinAWithAcuteDecomposed test := #$0061+#$0301;
2 2023-11-06
编程技术问答社区
C++:宽字符输出不正确?
我的代码基本上是这样: wstring japan = L"日本"; wstring message = L"Welcome! Japan is "; message += japan; wprintf(message.c_str()); 我希望使用宽字符串,但我不知道它们是如何输出的,所以我使用了wprintf.当我运行诸如: 之类的东西时 ./widestr | hexdump 六边形编码点创建以下内容: 65 57 63 6c 6d 6f 21 65 4a 20 70 61 6e 61 69 20 20 73 3f 3f e W c l m o ! e J p a n a i s ? ? 为什么它们都按顺序跳动?我的意思是,如果wprintf错了,我仍然不明白为什么它会以这种特定的混乱顺序输出! 编辑:endianness之类的东西?他们似乎每两个字符旋转.嗯. 编辑2:我尝试使用WCOU
4 2023-11-06
编程技术问答社区
的定义。AnsiString, WideString, String, char[], char*, BSTR。
这是对的后续后续 AnsiString也是班级吗?和string?这是一堂课吗?和char[]? 我们可以说WideString是双字节字符的包装器,AnsiString是单字字符的包装器,而char[]是单字节字符的数组? string不太确定它是什么... 不确定我在Code Builder C ++ 2007中可使用的字符串类型及其可移植性. 解决方案 char []创建字符类型的数组, char *创建指向类型字符的指针 AnsiString和BSTR是不可移植的,而std::string,char []和char*是完全便携的.
10 2023-10-02
编程技术问答社区
在Delphi中是否有必要将字符串转换为WideString?
我找到了一个Windows API函数,该功能执行字符串的"自然比较".定义如下: int StrCmpLogicalW( LPCWSTR psz1, LPCWSTR psz2 ); 要在Delphi中使用它,我以这种方式声明它: interface function StrCmpLogicalW(psz1, psz2: PWideChar): integer; stdcall; implementation function StrCmpLogicalW; external 'shlwapi.dll' name 'StrCmpLogicalW'; 因为它比较 unicode strings,我不确定我在我想要时如何称呼它比较ANSI字符串.但是,似乎足以将字符串施放到宽阔的弦上,然后再延伸到Pwidechar,但是,我不知道这种方法是否正确: function AnsiNaturalCompareText(const S1, S2:
12 2023-10-01
编程技术问答社区
C++中的L前缀到底是什么?
我理解它的作用:将字符串字面的字符串指定为const wchar_t *(宽字符串)而不是const char *(纯旧字符),但是如何实际定义? 它是某种宏吗?是海湾合作委员会编译器的运营商吗?什么是是 it? 解决方案 字面前缀是核心语言的一部分,就像后缀: 'a' // type: char L'a' // type: wchar_t "a" // type: char[2] L"a" // type: wchar_t[2] U"a" // type: char32_t[2] 1 // type: int 1U // type: unsigned int 0.5 // type: double 0.5f // type: float 0.5L // type: long double 请注意,wchar_t nothing 与unicode进行.这是一个关于该主题的扩展rant. 其他解决方
14 2023-10-01
编程技术问答社区
什么时候以及为什么sprintf会失败?
我正在使用swprintf将字符串构建到缓冲区中(使用循环除其他方面). const int MaxStringLengthPerCharacter = 10 + 1; wchar_t* pTmp = pBuffer; for ( size_t i = 0; i = 0 ); pTmp += nWritten; } *pTaskPlayers = '\0'; 如果在测试断言期间永远不会命中,我可以确定它永远不会在现场代码中击中吗?也就是说,我需要检查是否 在哪些情况下可以返回-1?该文档或多或少只是指出"如果功能失败
22 2023-07-14
编程技术问答社区
将广义的字符串字头与字符串宏结合起来
我有一个字符串的宏,如下: #define APPNAME "MyApp" 现在,我想通过执行以下操作来使用此宏来构造一个宽字符串: const wchar_t *AppProgID = APPNAME L".Document"; 但是,这会生成"串联不匹配的字符串"汇编误差. 有没有办法将应用程序宏转换为宽字符串字面? 解决方案 您是否尝试过 #define APPNAME "MyApp" #define WIDEN2(x) L ## x #define WIDEN(x) WIDEN2(x) const wchar_t *AppProgID = WIDEN(APPNAME) L".Document"; 其他解决方案 没有宏: const wchar_t *AppProgID = L"" APPNAME ".Document";
16 2023-04-08
编程技术问答社区
在Linux上将wstring转换为jstring
我在unix中将WSTRING转换为Jstring时遇到问题,因为Linux在4个字节中的WCHAR_T大小(不是Windows之类的2个字节,因此我无法将WCHAR_T的铸件使用到JCHAR). 任何人都可以帮我吗? 谢谢, reza 解决方案 您必须使用iconv()之类的东西,因为C ++宽字符串具有不透明(读:未知)编码,而Java则期望UTF16.尝试一下: #include #include #include #include std::u16string convert(std::wstring s) { iconv_t cd = iconv_open("UTF-16BE", "WCHAR_T"); if (cd == iconv_t(-1)) { std::cout
28 2023-02-28
编程技术问答社区
在C++中把宽的char字符串转换为小写字母
如何在C ++中将WCHAR_T字符串从上盒转换为较低情况? 字符串包含日语,中文,德语和希腊角色的混合物. 我考虑使用拖拖... http://mmsdn.microsoft.com/en-us/library/8H19T214%28vs.80%29.aspx ..但是文档说: 拖拖的案例转换是特定于区域的.只有与当前语言环境相关的字符. 编辑:也许我应该描述自己在做什么.我从用户收到Unicode搜索查询.它最初是在UTF-8编码中,但我将其转换为widechar(措辞上可能是错误的).我的调试器(VS2008)正确地显示了"可变快速手表"中的日语,德语等字符.我需要在Unicode中浏览另一组数据,并找到搜索字符串的匹配项.虽然当搜索对案例敏感时,这对我来说是没有问题的,但案例不敏感是更有问题的.我解决问题的(也许是天真的)方法是将所有输入数据和输出数据转换为较低的情况,然后比较它. 解决方案 如果您的字符串包含所有这些字符,则必须基于U
46 2023-02-24
编程技术问答社区
如何在Java中调用user32库的MessageBoxW函数传递宽字符串
我目前正在努力在Java中使用该函数MessageBoxW.我设法成功调用了User32库并使用MessageBoxA函数.这是我的代码: package messagebox; import com.sun.jna.Library; import com.sun.jna.Native; public class MessageBox { public interface user32 extends Library { public int MessageBoxA(int something, String text, String caption, int flags); } public static void main(String[] args) { System.out.println("Program starting... Library loading... ");
14 2023-02-03
编程技术问答社区
在FFI的背景下,我应该传递一个可变的引用还是转移一个变量的所有权?
我有一个程序,该程序通过C FFI(通过Winapi-Rs)使用Windows API.其中一个函数期望指向指向字符串作为输出参数的指针.该功能将其结果存储到此字符串中.我正在为此字符串使用类型WideCString的变量. 我可以"仅"将可变的ref传递给ref cef to string到该功能(在不安全的块内),还是应该使用.into_raw()> and .from_raw()之类的功能,也可以移动C函数变量? 两个版本都编译和工作,但我想知道我是否直接购买任何缺点. 这是我使用.into_raw和.from_raw的代码中的相关行. let mut widestr: WideCString = WideCString::from_str("test").unwrap(); //this is the string where the result should be stored let mut security_descriptor_ptr: winn
6 2022-09-21
编程技术问答社区
C++消耗Delphi DLL
我无法使用Delphi中开发的DLL的功能.我在类型的转换方面遇到了一些困难. 这是我要调用DLL的功能: function rData(ID: Cardinal; queue: WideString): WideString; stdcall; 我在C ++中的代码是如此: typedef string (*ReturnDataSPL)(DWORD, string); string result; HMODULE hLib; hLib = LoadLibrary("delphi.dll"); pReturnDataSPL = (ReturnDataSPL)GetProcAddress(hLib,"rData"); if (NULL != pReturnDataSPL) result = pReturnDataSPL(JobID,printerName); 问题我无法使其正常工作.我不知道哪种类型与Delphi Widestring和Cardinal兼容
34 2022-08-28
编程技术问答社区
为什么Delphi DLLs可以使用WideString而不使用ShareMem?
大卫对另一个问题的回答显示了delphi dll函数返回宽度.我从没想过没有使用ShareMem. 我的测试dll: function SomeFunction1: Widestring; stdcall; begin Result := 'Hello'; end; function SomeFunction2(var OutVar: Widestring): BOOL; stdcall; begin OutVar := 'Hello'; Result := True; end; 我的呼叫者程序: function SomeFunction1: WideString; stdcall; external 'Test.dll'; function SomeFunction2(var OutVar: Widestring): BOOL; stdcall; external 'Test.dll'; procedure TForm1.Button1Click
14 2022-08-28
编程技术问答社区
C++消耗Delphi DLL
我无法使用Delphi中开发的DLL的功能.我在类型的转换方面遇到了一些困难. 这是我要调用DLL的功能: function rData(ID: Cardinal; queue: WideString): WideString; stdcall; 我在C ++中的代码是如此: typedef string (*ReturnDataSPL)(DWORD, string); string result; HMODULE hLib; hLib = LoadLibrary("delphi.dll"); pReturnDataSPL = (ReturnDataSPL)GetProcAddress(hLib,"rData"); if (NULL != pReturnDataSPL) result = pReturnDataSPL(JobID,printerName); 问题我无法使其正常工作.我不知道哪种类型与Delphi Widestring和Cardinal兼容
52 2022-08-20
编程技术问答社区
(Wide)String-storing in TFileStream, Delphi 7. 最快的方法是什么?
我正在使用delphi7(non-unicode vcl),我需要在tfileStream中存储许多宽度.我不能使用tstringstream,因为(宽)字符串与二进制数据混合在一起,该格式被预测以加快加载和编写数据...但是我相信我正在加载/编写字符串可能是一个我的代码的瓶颈... 目前我正在写一条字符串的长度,然后由char编写char ... 加载时,首先我要加载长度,然后通过char加载char ... 那么,保存和加载到tfileStream的最快方法是什么? 预先感谢 解决方案 ,而不是一次读取和写一个字符,一次读和写所有字符: procedure WriteWideString(const ws: WideString; stream: TStream); var nChars: LongInt; begin nChars := Length(ws); stream.WriteBuffer(nChars, SizeOf(nChar
22 2022-08-19
编程技术问答社区
为什么Delphi DLLs可以使用WideString而不使用ShareMem?
大卫对另一个问题的回答显示了delphi dll函数返回宽度.我从没想过没有使用ShareMem. 我的测试dll: function SomeFunction1: Widestring; stdcall; begin Result := 'Hello'; end; function SomeFunction2(var OutVar: Widestring): BOOL; stdcall; begin OutVar := 'Hello'; Result := True; end; 我的呼叫者程序: function SomeFunction1: WideString; stdcall; external 'Test.dll'; function SomeFunction2(var OutVar: Widestring): BOOL; stdcall; external 'Test.dll'; procedure TForm1.Button1Click
24 2022-08-19
编程技术问答社区
我们能否在Unix编译器中使用wmain()函数,还是只能在windows下工作?
我们能否在 Unix 编译器中使用 wmain() 函数,或者它只能在\for windows 上工作? 解决方案 main 的唯一标准签名是: int main(void); int main(int argc, char *argv[]); 但是,独立的实现可以提供扩展/允许其他签名.但这些并不能保证是便携的.wmain 看起来像 Windows/VS 的东西.这在 *nix/GNU GCC 上运行的可能性不大.
284 2022-07-19
编程技术问答社区