草庐IT

java - 通过 JNI 将双字节 (WCHAR) 字符串从 C++ 传递到 Java

我有一个Java应用程序,它通过JNI使用C++DLL。DLL的一些方法采用字符串参数,其中一些方法返回也包含字符串的对象。目前DLL不支持Unicode,所以字符串处理比较简单:Java调用String.getBytes()并将生成的数组传递给DLL,DLL将数据简单地视为char*。DLL使用NewStringUTF()从constchar*创建jstring。我现在正在修改DLL以支持Unicode,切换到使用TCHAR类型(当定义UNICODE时使用Windows的WCHAR数据类型)。修改DLL进行得很顺利,但我不确定如何修改代码的JNI部分。我现在唯一能想到的是:Java调

c++ - 如何将 wchar_t 值打印到控制台?

例子:#includeusingnamespacestd;intmain(){wchar_ten[]=L"Hello";wchar_tru[]=L"Привет";//Russianlanguagecout此代码仅打印地址等十六进制值。如何打印wchar_t字符串? 最佳答案 编辑:如果您尝试编写无法在您的默认语言环境中表示的文本,这将不起作用。:-(使用std::wcout而不是std::cout。wcout 关于c++-如何将wchar_t值打印到控制台?,我们在StackOverf

c++ - wchar_t 与 unsigned short 冲突

我正在将我们的库更新到较新的版本,但遇到了编译错误:ClassName&ReturnClass::FuncName(wchar_t*,size_t)':memberfunctionalreadydefinedordeclared然而它之前是这样定义的:ClassName&ReturnClass::FuncName(unsignedshort*,size_t)'我们将wchar_t作为unsignedshort的typedef,这似乎是导致问题的原因。我曾尝试使用编译器选项wchar_t,但是当它看到typedef时,会导致库中出现大量错误。我正在使用nmake在Windows和MSDE

c++ - 将 long 转换为 wchar_t *

感谢阅读。我认为我在这方面已经很接近了,但我可以利用一些专业知识来理解为什么我对某事的尝试没有按照我期望的方式进行。我(目前)需要的是将long类型(LONG,因为我实际上是在VC++中,但我知道这只是一个typedef)转换为wchar_t*。我能够获得我想要的结果,但我无法理解为什么我认为应该起作用的方法……不起作用。这是实现我想要的结果的代码:conststd::wstringmyString{std::to_wstring(wRect.bottom)};constwchar_t*myCharPointer{myString.c_str()};与我想采用的方法相比:constwc

c++ - Clang 错误,没有可行的转换

我正面临clang3.1的问题。GCC4.2不会出现此特定问题。以下是发生错误的示例:#include#include#include#includetypedefunsignedshortchar16_t;typedefchar16_tTCHAR;typedefstd::basic_string,std::allocator>wstringT;templateinlinewstringTMyTestFunction(constT&source){std::wstringstreamout;out错误信息指出:Noviableconversionfrom'__string_type'(

c++ - Poco::Path 使用 const wchar_t* 编译但行为异常

使用Poco::Path我发现了一个非常奇怪的错误。见以下代码:#include#include#includeintmain(){std::wstringa_path=L"c:\\temp";//Poco::Pathfrom_wstring(a_path);//ERROR:failstocompile,expectedPoco::Pathfrom_wchar_t(a_path.c_str());//compiles...unexpectedstd::cout但上面程序的输出是(在Windows中):\而不是预期的:c:\temp查看Poco::Path文档,我看不到构造函数期望std

c# - c++ wchar数组到c#

我不了解C++,我必须将一些代码转化为C#。我已经设法做了一些工作,但我真的不明白如何转换几行,所以我在这里寻求帮助。这是C++代码:WCHARwsSerial[MAX_PATH]={'\0'};WCHARwsS2[MAX_PATH]={'\0'};wcscpy_s(wsSerial,MAX_PATH,m_strSerial);wcscpy_s(wsS2,MAX_PATH,wsSerial+8);wsS2[8]=NULL;ULONGulCode2=wcstoul(wsS2,NULL,10);这是我在C#中的内容:stringwsSerial;stringwsS2;wsSerial=mS

c++ - 从 'QChar' 转换为 'wchar_t'

我需要将QChar传递给需要wchar_t的函数:voidmyFunc(wchar_twch);尝试只传递QChar失败并出现错误:error:C2664:'myFunc':cannotconvertparameter1from'QChar'to'wchar_t' 最佳答案 即使在我提出问题时也找到了答案,我需要使用QChar::unicode().wchar_twch=qch.unicode(); 关于c++-从'QChar'转换为'wchar_t',我们在StackOverflow上

c++ - 如何将 wchar_t** 转换为 char**?

我得到argv作为wchar_t**(见下文),因为我需要使用unicode,但我需要将它转换为char**。我该怎么做?intwmain(intargc,wchar_t**argv){ 最佳答案 有不止一种方法可以做到这一点。根据您的环境和可用的编译器/标准库/其他库,您至少有三种选择:使用std::locale和std::codecvt方面;使用C语言环境函数,如std::mbstowcs();使用第3方函数,例如*nix上的iconv()或Windows上的WideCharToMultiByte()。您真的需要进行转换吗?您应

c++ - C/C++ 的广泛执行

是否有exec[lv][pe]的wchar_t版本(即使用wchar_t的exec>作为路径和wchar_t作为参数)?在Windows中,我可以只执行CreateProcessW(process,cmdline),但在*nix中,我卡住了(即没有纯POSIX等效)。我正在尝试为我的程序添加UTF-16支持(自动运行)。 最佳答案 没有。在UNIX中,与环境交互时习惯使用UTF-8。 关于c++-C/C++的广泛执行,我们在StackOverflow上找到一个类似的问题: