【问题标题】:MultiByteToWideChar doesn't work properlyMultiByteToWideChar 无法正常工作
【发布时间】:2018-08-20 05:32:20
【问题描述】:

我正在尝试使用MultiByteToWideChar api。对于lpWideCharStr,当我使用具有动态内存分配的指针时,它可以正常工作。但是现在我应该使用带有静态内存分配的指针,正如您在代码中看到的那样。并且不能正常工作,返回0。

这有什么问题?

我应该如何在MultiByteToWideChar 中为lpWideCharStr 使用静态内存分配指针?

感谢您的解决方案。

#include <windows.h>
#include <iostream>
#include "Shlwapi.h"

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

void main(int argc, char *argv[]){

    int iToSizeB = 0;
    iToSizeB = MultiByteToWideChar(CP_UTF8, 0, argv[1], -1 , NULL, 0);

    LPWSTR lpFileAddress[260] = {0};
    int nResult = 0;

    //MultiByteToWideChar function reurns 0 !!!
    nResult = MultiByteToWideChar(CP_UTF8, 0, argv[1], -1, lpFileAddress[0], iToSizeB);
}

【问题讨论】:

  • 您应该会收到有关此代码的诊断消息

标签: c++ winapi visual-studio-2012 console-application


【解决方案1】:

你的意思可能是这样的:

WCHAR lpFileAddress[260] = {0};
nResult = MultiByteToWideChar(CP_UTF8, 0, argv[1], -1, lpFileAddress, iToSizeB);

在您的代码中,根据需要定义 WCHAR 指针数组:LPWSTR lpFileAddress[260] 而不是 WCHAR 数组:WCHAR lpFileAddress[260] = {0};

【讨论】:

  • WSTR 数据类型是什么?在我的 IDE 中是未知的。我正在使用 VS 2012。
  • iToSizeB 可以大于 260。KABOOM!
猜你喜欢
  • 2016-12-01
  • 1970-01-01
  • 2016-09-01
  • 2012-07-11
  • 2018-04-08
  • 2017-04-20
  • 2018-10-02
  • 2016-09-04
  • 2010-10-06
相关资源
最近更新 更多