【问题标题】:WinApi - ToUnicode function throws an access violation? [duplicate]WinApi - ToUnicode 函数引发访问冲突? [复制]
【发布时间】:2018-02-28 23:16:50
【问题描述】:
LPWSTR data[256];
ToUnicode(vk_code, 0, 0, *data, 256, 0);

此代码引发以下异常:

Access violation writing location 0xCCCCCCCC.

vk_code 值似乎在断点处完全正常,我检查了 msdn 以确保我的参数有效。我可能做错了什么?

【问题讨论】:

  • 在尝试使用 Windows API 之前,有必要好好学习一下数组和指针。你给它一个未初始化的指针。
  • @chris 会做,当查看0xCCCCCCCC 地址时,它原来是用于调试未初始化值的内存位置。
  • 这不正确。 “地址”0xCCCCCCCC 根本没有意义。 0xCC 是用于在调试配置中初始化未初始化变量的模式。它可以帮助您在调试过程中轻松发现未初始化的变量。不过,这个实际值并不有趣。当传递 nullptr 代替 *data 时,您会得到同样的异常。

标签: c++ winapi


【解决方案1】:

您正在向pwszBuff 参数传递一个未启动的指针。它需要一个指向已分配字符数组的指针。将数组更改为使用 WCHAR 元素而不是 LPWSTR 元素,并去掉 * 取消引用运算符:

WCHAR data[256];
int res = ToUnicode(vk_code, 0, 0, data, 256, 0);
switch (res) {
    case -1:
        // dead-key character, nothing written to data[]... 
        break;
    case 0:
        // no translation, nothing written to data[]... 
        break;
    default:
        // res # of characters written to data[]... 
        break;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多