使用 TCHAR 时出错,无法转换为 wchar_t

2024-01-04

我被要求向现有的旧项目添加功能,但我无法构建它。 它处理 unicode 字符串,但我在使用 TCHAR 时遇到很多错误。具体来说,几乎每个错误都是 TCHAR 无法转换为或用作 wchar_t。 从我在许多不同的文章中看到的内容来看,我尝试使用 #define _UNICODE 或 #define UNICODE 但它们都没有解决问题。

这是一段代码:

#include <windows.h>
#include <wininet.h>
#include <tchar.h>
#include <iostream>
#include <fstream>
#include <strsafe.h>
#include <string>
#include <list>
#include <cctype>
#include <winnt.h>
#include <atlconv.h>

#pragma comment(lib,"wininet.lib")

using namespace std;

TCHAR *tags[] = { _T("aa"), _T("bb"), _T("cc"),
NULL };

int _tmain(int argc, _TCHAR* argv[])
{


int i = 0;


for (i = 1; i<argc; i++) { 
    if (wcscmp(argv[i], _T("-h")) == 0) {
        ...
    }
    else if (wcscmp(argv[i], _T("-f")) == 0) {
        ...
    }


...
}

例如,在上面几行中,当使用 wcscmp 时,我得到

    argument of type "_TCHAR *" is incompatible with parameter of type "const wchar_t *"

关于 argv[i]

and

    argument of type "const char *" is incompatible with parameter of type "const wchar_t *"

关于 _T("-h")。

任何建议将不胜感激。


该代码是针对 Unicode 而不是 MBCS 编写的。这可以通过使用来辨别wcscmp它接受类型的参数const wchar_t*.

另一方面,代码的某些部分使用了TCHAR以及相关的宏。现在,TCHAR http://msdn.microsoft.com/en-us/library/c426s321.aspx是一个宏,可以解析为char or wchar_t取决于是否_UNICODE or _MBCS被定义。咨询文档 http://msdn.microsoft.com/en-us/library/c426s321.aspx更多细节。

指某东西的用途TCHAR源于开发人员希望为 Windows NT/2000(支持 ANSI 和 Unicode API)和 Windows 95/98(仅支持 ANSI API)编写代码的时代。指某东西的用途TCHAR允许通用的代码库。编译用_UNICODE为 NT/2000 定义,并编译_MBCS定义为 95/98。

如果你用这种风格编码,那么你会写_tcscmp而不是wcscmp。对于 Unicode 构建,它解决了wcscmp,对于 MBCS 构建,它解析为_mbscmp.

如今,您通常不需要编写代码来支持 95/98。您可能可以选择忽略这些平台。在这种情况下,您应该以 Unicode 为目标并停止使用TCHAR以及相关的宏。代替_T("..") with L".."。代替tmain with wmain。代替TCHAR with wchar_t。等等。

您不需要进行这些更改。您可以简单地以 Unicode 为目标,然后您的代码就会编译。但是,那TCHAR习惯用法在您的代码库中的应用不一致。注意使用_tmain, TCHAR,还调用wcscmp。因此,除非您的代码以 Unicode 为目标,否则无法编译。所以放弃你不会有任何损失TCHAR。你所获得的是清晰度。您可以停止使用这些宏并避免它们提供的所有混淆。间接是一个很好的工具,但如果不需要它,那么它只会导致混乱和混淆。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TCHAR 时出错,无法转换为 wchar_t 的相关文章

  • 更改文本框中文本的前景色和背景色

    我正在使用 VB NET 制作 C 代码编辑器应用程序 我想在用户键入关键字时更改关键字的颜色 另外 我正在寻找一种方法来突出显示某些代码行 有没有办法更改文本框或富文本框中一段文本的前景色和背景色 我真的不知道你想做什么 所以这里有一些选
  • 为什么 C++ Concepts TS 中同时存在变量和函数概念?

    我一直在看 C 1zN4377 http www open std org jtc1 sc22 wg21 docs papers 2015 n4377 pdfGCC 6 中正在实现的概念 TS 草案 我不明白拥有两种不同概念的目的 变量概念
  • Windows 控制台中的 C++ 按键输入

    我目前正在开发各种consoleWindows 中的游戏无法通过常规输入真正运行cin 我怎样才能 以简单的方式仅使用 MSVC 中提供的标准 Windows 库 让程序等待 特定 按键并返回按键 ID 它必须适用于包括箭头键在内的所有按键
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • 单击按钮本地化应用程序

    我在我的项目 mainMaster 页面中找到了 imageButtons
  • 序列化 .NET WCF 服务的类型时出现问题:服务 WSDL 在 XSD 中定义空类型

    我正在使用 WCF 编写一个 Web 服务 我创建了数据合约 我创建了我的服务合同 界面 我定义了方法 其参数的类型与数据契约相同 我实现了创建服务类的服务合同 我使用 svc 文件和 IIS 托管我的服务 我尝试了我的服务 寻找http
  • ReportViewer“缺少 URL 参数:名称”

    在一个网络应用程序中 我正在处理 ReportViewer 时不断出现错误 缺少 URL 参数 名称 我找到了原因 但没有找到解决方案 导致报告查看器出现异常的 url Reserved ReportViewerWebControl axd
  • 无法运行bjam编译boost python教程

    我正在尝试跟随本教程 http www boost org doc libs 1 55 0 libs python doc tutorial doc html python hello html关于为 Windows 的 python 包装
  • 如何从子窗口中加载的用户控件按钮关闭子窗口?

    这是我的 ChildWindow xaml 代码 1
  • 弹出窗口或弹出窗口显示附加信息

    我想在我的应用程序顶部显示带有附加信息的弹出窗口 我的信息是Listview大约 500 个项目我都尝试过 有问题flyout gt 它里面可能有scrollViewer 所以我的列表视图不能正确虚拟化 其他一切都可以 有我的代码 Flyo
  • 使用来自不同线程的实时数据更新 QTableView 的最佳策略

    我的应用程序现在启动几个线程 如 5 10 个 来从不同源收集数据 它们与主 GUI 线程分离 因此我在 GUI 中感觉不到任何缓慢 并且我可以在后台线程工作时继续工作 一切都很棒 但现在我希望能够在我的主 GUI 中的 QTableVie
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • 在 C 或 C++ 中使用逗号作为宏名称

    我想做这样的事情 define define MAX 10 000 000 undef 有什么技巧可以做到吗 编辑 我知道 C 14 中的数字分隔符 我正在寻找一种技巧来对不兼容的编译器执行相同的操作 EDIT2 请考虑Variadic M
  • 让 AutoMapper 自动映射前缀属性

    我希望 AutoMapper 自动映射成员 如下所示 class Model public int ModelId get set class ModelDto public int Id get set 在这里 我会做一个 CreateM
  • 为什么 `boost::any` 比 `void*` 更好?

    有什么先天优势boost any and boost any cast提供超过使用void and dynamic cast 优点是boost any比类型安全得多void E g int i 5 void p i static cast
  • 模板是如何实例化的?

    这是一个练习 来自C 入门第五版 练习 16 27 对于每个带标签的语句 解释什么 如果有 实例化发生 如果实例化了模板 请解释原因 如果 不 请解释为什么不 第677页 template
  • 在源代码和预编译二进制文件之间切换

    我们的应用程序中有大量的库 库是用 C 或 C 编写的 平台 net Framework Windows 64 位 将所有内容编译为源代码需要花费大量时间 我们正在考虑切换到预构建的二进制文件 但我们仍然希望保留返回源代码的可能性 作为版本
  • WCF - IsOneway 的行为不像 Oneway 操作

    我已在服务的某些方法上定义了 OneWay 属性 但它们的行为并不像 Oneway 调用 我的客户等待呼叫完成并从服务返回 我假设单向操作是非阻塞操作 并且客户端不关心被调用函数会发生什么 它只是调用并忘记它 这是对的吗 问题 调用 Ope
  • 类型 '' 未映射

    我已经尝试修复这个错误有一段时间了 每当我的应用程序尝试创建数据上下文的实例时 我都会收到此错误 下面是代码 using System using System Collections Generic using System Linq u
  • win32 内容已更改,但除非移动窗口,否则不会显示更新

    我的 win32 GUI 内容每秒都会更改 但除非手动移动窗口 否则不会显示更新 我尝试每秒弹出一个消息框来触发窗口刷新 它成功了 因此 这证明我的内容确实发生了变化 但窗口没有更新 我希望刷新窗口而不是每次都弹出消息框 有没有这样的窗口功

随机推荐

  • Golang 构建随机约束

    我有两个 go 文件 标头中具有不同的构建约束 常量 生产 go build production staging package main const URL production 常量 staging go build staging
  • `BehaviorSubject` 和 `Sink` 之间有什么关系吗?和`StreamController`?

    通过阅读 abin的回答Flutter中Sink和Stream有什么区别 https stackoverflow com questions 50350235 我已经理解了之间的关系Sink and Stream 除此之外 还有什么关系Be
  • 如何将新数据附加到属性文件中的现有数据?

    我正在使用以下代码将数据写入属性文件 public void WritePropertiesFile String key String data Properties configProperty new Properties confi
  • JavaScript 路由正则表达式

    我需要构建一个路由器 将 REST 请求路由到正确的控制器和操作 这里有一些例子 POST users GET users uid GET users search q lol GET users GET users uid picture
  • 从 PHP Curl 获取 POST Zapier Webhook 响应

    我正在使用 Zapier Webhooks 来集成 Web 门户和 API 门户网站和 API 都是使用 php 开发的 我正在使用curl向Zapier中的catch hook发送请求 发送发布数据 然后在我的 zap 中 第二步获取捕获
  • 使用 msmq 进行异步日志记录

    我需要在我们的应用程序中进行日志记录 并希望尽可能少地保留因日志记录而消耗的时间 我正在考虑使用 MSMQ 以便应用程序登录到 MSMQ 然后我可以将消息从 MSMQ 异步记录到数据库 文件 这个想法在性能方面好吗 或者使用 log4net
  • 如何执行命令提示符并从中获取输出?

    我是Python的新手 我想编写一个Python程序 可以在cmd中执行一些命令并自动从中获取输出 是否可以 我怎样才能做到这一点 你会想要使用subprocess Popen https docs python org 3 4 libra
  • 使用 Jest 模拟的服务会导致“不允许 jest.mock() 的模块工厂引用任何超出范围的变量”错误

    我正在尝试模拟对服务的调用 但我正在努力处理以下消息 模组厂jest mock 不允许引用任何超出范围的变量 我正在使用 babel 和 ES6 语法 笑话和酶 我有一个简单的组件叫做Vocabulary它得到一个列表VocabularyE
  • Lambda 不会触发 SNS 事件。将 AWS lambda 与 SNS 链接起来

    我使用 AWS 将 lambda 链接在一起 方法是让第二个 lambda 订阅第一个 lambda 的 SNS feed 第二个 lambda 没有从第一个 lambda 接收任何内容 并且我在 CloudWatch 或我订阅的个人电子邮
  • 是否可以在 Vista 上构建 exe 并使用 py2exe 在 XP 上部署

    我在 Windows Vista 上使用 python 创建了一些程序 但我想将它部署在 Windows XP 上 是否有必要在Windows XP上进行新的构建 或者是否有可能构建在这两个系统上都可以运行的版本 编辑 编辑2 非常简单的程
  • 在 DataSources.groovy 中扩展多个 grails 数据源?

    您定义的每个环境DataSource groovy扩展基础dataSource定义位于文件根部 环境之外 我有两个特定的配置 需要将它们应用于许多不同的环境 这些环境具有较小的特定于环境的更改 实际上 我需要两个 基本定义 或者某种方式来扩
  • Tortoise-ORM:如何从 tortoise.contrib.postgres.fields 查询 Postgres `ArrayField`

    刚刚创建了一个 PostgresArrayField在 Tortoise ORM 中通过from tortoise contrib postgres fields import ArrayField托管一些我想放置的标签 查看我的 Post
  • .ps1 脚本在 .bat 文件脚本中报告为“缺少结束符 '}'”

    我在将简短的 PowerShell 脚本转换为 cmd exe bat 文件脚本时遇到困难 错误消息 见下文 抱怨 缺少结束 ps1 脚本按预期成功运行 我在赋值语句末尾使用了分号字符 我用脱字符号 转义了垂直线 竖线 字符 我缺少什么 这
  • 片段不会启动

    我有 onclicklistener 可以工作 我正在尝试通过单击列表视图上的按钮启动一个新片段 目前 该片段尚未启动 但是 我们使用的模拟器不会崩溃 因此如果我们正确理解这一点 它就不会连接到新的片段 XML 页面 public void
  • 在 Chart.js 中的条形顶部显示值

    请参考这个小提琴 https jsfiddle net 4mxhogmd 1 https jsfiddle net 4mxhogmd 1 我正在研究 Chart js 如果您在小提琴中看到 您会注意到在某些情况下条形顶部的值未正确显示 超出
  • 我可以在 contentful-client 中使用“useSWR”来创建分页吗?

    我正在尝试使用 nextjs 和 useSWR 挂钩创建分页 这就是我目前的做法 它似乎正在工作 但是我在文档中读到 作为第一个参数传递的密钥应该是一个唯一的字符串 通常是一个 URL 我只是传递索引来获取正确的数据 我的方法会扰乱缓存吗
  • iOS:检测或禁用多个图像选择

    我们有一个带有图像附件控件的 UIWebview 当用户点击该控件时 会弹出一个 iOS 操作表 当用户点击 浏览 或 照片库 时 用户可以选择多个图像 然后我拦截 void imagePickerController didFinishP
  • Rails 5.2 加密凭证不保存

    当我做bin rails credentials edit我的编辑器打开一个文件 例如credentials yml enc 1234与默认内容 完成编辑后 我点击保存 控制台显示New credentials encrypted and
  • Chrome 新版本 73.0.3683.75 的 Ajax 调用错误?

    我的代码在 Chrome 更新之前运行良好 我向我的服务器发出 ajax 调用 我的服务器收到调用 将 JSON 返回给客户端 但答案始终为空 当我查看 Fiddler 时 我从服务器得到了答案 我尝试使用 JQuery 还尝试使用 xml
  • 使用 TCHAR 时出错,无法转换为 wchar_t

    我被要求向现有的旧项目添加功能 但我无法构建它 它处理 unicode 字符串 但我在使用 TCHAR 时遇到很多错误 具体来说 几乎每个错误都是 TCHAR 无法转换为或用作 wchar t 从我在许多不同的文章中看到的内容来看 我尝试使