问题标签 [tchar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
winapi - 为什么是 TTN_NEEDTEXTW 而不是 TTN_NEEDTEXTA?
这是一个我从未想过的老问题 - 想知道这里是否有人碰巧知道你脑海中的答案......
在我们软件的某些部分 (MFC/Win32/MBCS) 我的代码只会收到
TTN_NEEDTEXTW
在我们软件的其他部分,我会收到 MBCS 正确消息
TTN_NEEDTEXTA
对我来说完全是无稽之谈。
我知道我们的软件可以编译为 Unicode 或不编译(我们设置为使用多字节字符集)。我有一个模糊的回忆,每个窗口都可以构造成 Unicode 或不构造,虽然这是一个模糊的记忆,没有什么具体的。
有谁知道为什么我们会在代码中的某些地方得到宽版本消息,尽管被编译为多字节?
笔记:
- 我们绝对不会发送此消息 - 大概是 ToolTip 控件。
- 我们肯定只在某些地方接收到 (W) 消息,而在其他地方肯定只接收到 (A) 消息。
- 我确定所有编译模块都使用 MBCS,而不是 Unicode,并且构建目标都指定 MBCS 而不是 Unicode。
- 这似乎只发生在 CMainFrame 托管的窗口和控件上。即主框架之外的窗口可以使用窄版本(比如在对话框中)。
c++ - `cout << argv[0]` 返回十六进制值?
代码:
如您所见,一个标准的 Win32 控制台应用程序。
令人困惑的部分是, 的值argv[0]
输出为00035B88
。
这是(AFAIK)在没有命令行选项的情况下运行的,因此argv[]
应该还没有值。(或者这是问题所在?)
但是,argv[]
被声明为指针 ( _TCHAR*
),我听说它cout
会打印指针的地址。是这样吗?如果是这样,我如何打印/使用 的值argv
?
c++ - 比较具有相同值的两个 TCHAR 的结果为 false
我正在尝试检查我的应用程序路径,如果它不是指定路径,则移动它。我觉得我的代码很可靠,但它不能正常工作。
即使文件位于新路径中,它仍然会导致 pCheck != xPath
我从来没有收到“新位置”消息框。当显示前两个消息框时,路径是相等的......
c++ - 如何在 Visual Studio 中禁用微软对 tchar.h 的装饰?
默认情况下,Microsoft 的 Visual Studio 使用<tchar.h>
并定义main
为int _tmain(int argc, _TCHAR* argv[])
. 这可能很有用,但并非总是如此。
如何在默认的新项目中禁用此功能?
更新
我想用简单main
的s创建空项目...
windows - 有没有办法在宏中“有条件地”使用 _T/TEXT?
这个问题特定于 Visual C++(您可以假设 Visual C++ 2005 及更高版本)。
我想为来自 unixoid 系统(特别是 FreeBSD)的程序创建粘合代码,以便在 Win32 上构建和运行,而对原始.c
文件的更改最少。现在,大部分内容都很简单,但现在我遇到了一个问题。我正在使用tchar.h
标头和TCHAR
/ _TCHAR
,并且需要在原始代码中为err
anderrx
调用创建粘合代码(请参阅 参考资料)。err(3)
请耐心等待,即使您不同意tchar.h
仍应编写代码 using。
调用err
和errx
大致采取两种形式,这就是问题发生的地方:
后者将输出存储在errno
(使用strerror
)中的错误。
现在,问题是,有没有办法编写一个可以同时NULL
接受字符串文字的通用宏?我不必(也不会)关心作为第二个参数传递的变量NULL
,只有和文字字符串。
当然,我天真的初始方法没有考虑fmt
传递为NULL
(使用可变参数宏!):
现在我不知道如何使用宏来实现这一点,因为它需要一种我目前无法想象的编译时和运行时条件的混合。因此,我正在寻找一个权威的答案,无论这是否可以想象。
我现在采用的方法 - 缺乏更好的方法 - 是编写一个接受的包装函数,就像err
and errx
, a ( const
)char *
然后将其转换为wchar_t *
if 编译时_UNICODE
定义。这应该可以工作,假设调用者在后面传递了一个_TCHAR*
变量参数的字符串fmt
(在我的上下文中这是一个理智的假设)。否则,我还必须转换%s
为%hs
格式字符串内部,以处理 MS 所称的“ANSI”字符串。
winapi - _T("") 宏,用于非 MFC、Win32 项目
我正在创建一个 Win32 项目,并且我正在尝试在TCHAR
任何地方使用。但由于它是一个非 MFC 项目,我没有_T
定义。
我如何在我的项目中获得它?
c - 尝试制作 tchar 时从非宽字符串初始化的 int-array
我正在尝试像这样在这里创建一个 tchar 数组: TCHAR c_wText[100] = _T("string here");
但是在编译时我收到一条错误消息:int-array initialized from non-wide string
我错过了什么?
c++ - 将 wstring 转换为 TCHAR 的问题
我对编程很陌生,我正在尝试编写一个程序,用户输入一个日期,然后将该日期添加到文件目录名称中,然后搜索该文件目录。
下面是我正在使用的内容。我有很多功能可以做到这一点。我在网上搜索并尝试用几种不同的方式进行转换,但我只是不理解它......所以我离开了(我知道的是不正确的)a静态转换。
也许我只是没有做正确的转换......基本上这会将它扔回使用 WINAPI 处理程序的函数。我能否让它发挥作用是一个完全不同的故事......在此先感谢您的帮助!
c++ - C++ 到 vb.net TCHAR 数组使用转换
我不是 c++ 程序员,我需要将此 c++ 代码转换为 vb.net:
我不太明白,我只知道这是从 Int 到 TCHAR 数组的转换。
我想知道如果
会工作还是我会错过什么?
任何帮助都将不胜感激!谢谢 :)
c - 检测 Visual C++ 中存在哪个版本的 vswprintf()
我有一个项目,它使用_vscwprintf()
/ vswprintf()
(通过_vsctprintf()
/ _vstprintf()
)在malloc()
ed 缓冲区中创建任意长度的格式化字符串。
当我在 Visual C++ 2008 下启动项目时,_vstprintf()
取了三个参数:
但是在离开我的项目一段时间后,当我使用 Visual C++ 2012 回到它时,我发现 MS 已将函数更改为采用四个参数:
我希望我的代码可以在 Visual C++ 2008、2010 和 2012 下构建(它也可以移植到 Linux 和 Solaris)。
是否有一些符号可以检查,#ifdef
以便我可以使用函数的 3 参数或 4 参数版本正确构建?
我假设有一个符号告诉我我正在编译哪个版本的 Visual C++,但这是正确的方法吗?例如,较新的编译器是否有可能使用较旧的 C 库或运行时构建,反之亦然?
我的代码实际上是使用 C 而不是 C++,如果这有所不同的话。