无法将参数 1 从“const char [5]”转换为“LPCTSTR”

2024-03-11

我正在使用这个代码项目:http://www.codeproject.com/Articles/10138/Voice-Recording-Playing-back-using-simple-classes http://www.codeproject.com/Articles/10138/Voice-Recording-Playing-back-using-simple-classes

void CFisterDlg::OnRecord() 
{
    CString string;
    m_RecButton.GetWindowText(string);
    if(string == "Record")
    {
        StartRecordingToFile();
        m_RecButton.SetWindowText("Stop");
    }
    else
    {
        StopRecordingToFile();
        m_RecButton.SetWindowText("Record");
    }
}

但我在很多地方都遇到这个错误:

error C2664: 'void CWnd::SetWindowTextW(LPCTSTR)' : cannot convert argument 1 from 'const char [5]' to 'LPCTSTR'

我认为这与我使用最新版本的Visual Studio(2013)有关。


MSVC2013 可以与两种原始字符串交互。生的char字符串看起来像"Hello". wchar_t字符串看起来像L"World".

此外,还有一个设置可以确定您的项目是否使用wchar_t or char字符串。宏观TCHAR扩展到char or wchar_t,以及宏_T("some text")将扩展到任一"some text" or L"some text"取决于您的项目是否编译使用char or wchar_t.

几乎每个采用字符串的 Windows API 都有一个宏将其包装起来,将其映射到char版本或wchar_t版本。

所有这一切的目标是使编写单个应用程序成为可能,并使其能够识别或不识别宽字符。

Windows 上的约定是窄字符char接口使用基于代码页的系统和宽字符wchar_t接口使用 UTF-16 字符(W2K 之前操作系统中 UCS-2 的子集,如果我正确阅读维基百科文章,XP 中没有系统字体支持 UCS-2 之外的字符)。

这一切的结束?您的项目已以某种方式设置为使用宽字符串。这是一件好事,因为窄字符构建的应用程序无法处理除一个字符代码页之外的任何内容。

因此,您的窄字符常量会产生错误,因为 API 现在需要宽字符常量。

简单的解决办法就是把你所有的"raw strings"s in _T("raw string") the _T宏。当你使用char const*或您的代码中的类似内容,而是使用TCHAR const*.

包括一个执行相同操作的系统std::string and std::cout和别的char based std和其他库,或者在使用这些库时不与用户交互,并且在与窗口对话时使用A终止接口char or W终止的接口函数wchar_t基于字符串。

如今“回去”已经很少见了char基于 Windows 上的界面,因此一种方法是取消宏并仅与W直接基于接口。你的琴弦都变成了L"wide character", your std东西就是全部std::wstring等等,你的字符变量都是wchar_t。这可能不被认为是最佳实践。

最后,请注意,两者char and wchar_t基于窄和宽的接口可以有多个char or wchar_t每个“字符”。当所有支持的窗口都是单一窗口时,对于窄窗口来说,情况并非如此。wchar_t来自 UTF-16 的元素,以及多wchar_t字符相对较少,因此很多代码无法处理这种可能性。

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

无法将参数 1 从“const char [5]”转换为“LPCTSTR” 的相关文章

  • 检测到 NuGet 包的版本冲突

    我正在开发 ASP Net core 2 1 Web 应用程序项目 我的解决方案中有 1 个项目和 3 个其他库 它是高级架构 数据访问层 DAL 业务层 BL 公共层 CL 所以我需要添加引用来连接一些库和项目 我已经添加了CL参考我的项
  • 如果.Net Core可以在Windows上运行,为什么不能在.Net Framework中引用.Net Core DLL?

    我明白为什么 Net Framework 可能会在 Net Core IE 中导致问题 因为不存在特定于 Windows 平台的 API 但是为什么不能直接引用 Net Core 作为 Net Framework 中的库呢 如果 Net C
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • Blazor 与 Razor

    随着 Blazor 的发明 我想知道这两种语言之间是否存在显着的效率 无论是在代码创建方面还是在代码的实际编译 执行方面 https github com SteveSanderson Blazor https github com Ste
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • ASP .NET MVC,创建类似路由配置的永久链接

    我需要帮助在 MVC 网站中创建类似 URL 路由的永久链接 Slug 已设置为 www xyz com profile slug 代码为 routes MapRoute name Profile url profile slug defa
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • try-catch 中未处理的异常

    try list from XElement e in d Descendants wix File where e Attribute Name Value Contains temp Name e Parent Parent Attri
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 用于从字符串安全转换的辅助函数

    回到 VB6 我编写了一些函数 让我在编码时无需关心字符串的 null 和 数字的 null 和 0 等之间的区别 编码时 没有什么比添加特殊情况更能降低我的工作效率了用于处理可能导致一些不相关错误的数据的代码 9999 10000 如果我
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • C# 搜索目录中包含字符串的所有文件,然后返回该字符串

    使用用户在文本框中输入的内容 我想搜索目录中的哪个文件包含该文本 然后我想解析出信息 但我似乎找不到该字符串或至少返回信息 任何帮助将不胜感激 我当前的代码 private void btnSearchSerial Click object
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行
  • Silverlight Datagrid:在对列进行排序时突出显示整个列

    我的 Silverlight 应用程序中有一个 DataGrid 我想在对该列进行排序时突出显示整个列 它在概念上与上一个问题类似 Silverlight DataGrid 突出显示整列 https stackoverflow com qu
  • 32位PPC rlwinm指令

    我在理解上有点困难rlwinmPPC 汇编指令 旋转左字立即然后与掩码 我正在尝试反转函数的这一部分 rlwinm r3 r3 0 28 28 我已经知道什么了r3 is r3在本例中是一个 4 字节整数 但我不确定这条指令到底是什么rlw
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo

随机推荐