在gcc windows api字符串處理中啟用UNICODE

我正在用test.cpp中的以下測試片段,嘗試掃描windowswave設備;

using namespace std;
#include <string>
#include <vector>
#include <Windows.h>

int main () 
{ 
    int nDeviceCount = waveOutGetNumDevs();
    vector<wstring> sDevices;
    WAVEOUTCAPS woc;
    for (int n = 0; n < nDeviceCount; n++)
        if (waveOutGetDevCaps(n, &woc, sizeof(WAVEOUTCAPS)) == S_OK) {
            wstring dvc(woc.szPname);
            sDevices.push_back(dvc);
        }
    return 0; 
} 

使用gcc version 8.1.0 (i686-posix-dwarf-rev0, Built by MinGW-W64 project)在PowerShell中編譯時,出現以下錯誤:

PS xxx> g++ .\test.cpp -c
.\test.cpp: In function 'int main()':
.\test.cpp:14:27: error: no matching function for call to 'std::__cxx11::basic_string<wchar_t>::basic_string(CHAR [32])'
    wstring dvc(woc.szPname);

我認為wstring構造函數包含對c-stylenull-terminated字符串的支持。為什么我會犯這個錯誤?

? 最佳回答:

默認情況下,UNICODE宏是未定義的。這使得pzPname字段在定義中是CHAR pzPname[MAXPNAMELEN]。這就是錯誤產生的原因,因為std::wstring試圖用char數據而不是wchar_t數據初始化。

要解決這個問題,請在包含Windows.h文件之前放置一個#define UNICODE語句,或者改用std::string

主站蜘蛛池模板: 精品日产一区二区三区手机| 四虎精品亚洲一区二区三区| 国产一区二区三区在线观看免费| 亚洲AV无码一区二区三区性色| 色婷婷综合久久久久中文一区二区 | 午夜福利无码一区二区| 日韩AV片无码一区二区不卡| 国产无吗一区二区三区在线欢| 一区视频在线播放| 日本中文字幕一区二区有码在线| 99久久无码一区人妻a黑| 国产精品一区不卡| 一区二区三区四区国产| 色妞色视频一区二区三区四区 | 亚洲香蕉久久一区二区| 色综合久久一区二区三区| 国产AV午夜精品一区二区三| 日韩亚洲AV无码一区二区不卡| 日韩在线一区视频| 无码av免费一区二区三区| 日本精品一区二区三区视频| 中文国产成人精品久久一区| 一区二区三区视频| 99久久精品国产高清一区二区| 国产一区二区三区韩国女主播| 冲田杏梨高清无一区二区| 精品性影院一区二区三区内射| 人妻无码一区二区视频| av无码免费一区二区三区| 日本一区午夜艳熟免费| 无码人妻av一区二区三区蜜臀| 高清国产AV一区二区三区 | 精品无码综合一区| 亚洲一区二区三区国产精华液| 久久成人国产精品一区二区| 国产成人欧美一区二区三区| 久久一区不卡中文字幕| 一区二区三区在线看| 亚洲AV无码一区二区大桥未久| 久久久久成人精品一区二区| 精品女同一区二区三区在线|