相关疑难解决方法(0)

LPCWSTR代表什么,应如何处理?

首先,究竟是什么?我猜它是一个指针(LPC意味着长指针常量),但"W"是什么意思?它是指向字符串的特定指针还是指向特定字符串的指针?例如,我想关闭一个名为"TestWindow"的窗口.

HWND g_hTest;
LPCWSTR a;
*a = ("TestWindow");
g_hTest = FindWindowEx(NULL, NULL, NULL, a);
DestroyWindow(g_hTest);
Run Code Online (Sandbox Code Playgroud)

代码是非法的,它不起作用,因为const char [6]无法转换为CONST WCHAR.我根本得不到它.我想清楚地了解所有这些LPCWSTR,LPCSTR,LPSTR.我试图找到一些东西,但我更加困惑.在msdn网站FindWindowEx被声明为

HWND FindWindowEx(      
    HWND hwndParent,
    HWND hwndChildAfter,
    LPCTSTR lpszClass,
    LPCTSTR lpszWindow
);
Run Code Online (Sandbox Code Playgroud)

所以最后一个参数是LPCSTR,编译器要求LPCWSTR.请帮忙.

c++ winapi lpcstr

79
推荐指数
3
解决办法
13万
查看次数

在Windows上将filesystem :: path转换为char*

在C++ 17的文件系统是基于Boost.Filesystem的.

我现在正在Windows上使用VS2017.

#include <filesystem>
namespace fs = std::experimental::filesystem;
Run Code Online (Sandbox Code Playgroud)

我遍历一个目录

for (auto& p: fs::directory_iterator("media"))
Run Code Online (Sandbox Code Playgroud)

我想将路径传递给一个将文件路径作为的函数 const char *

我在这里找到了一个关于boost文件系统的类似问题.核心差异在于C++ 17中的路径基于a value_type.哪里

value_type:文件系统的本机编码使用的字符类型:POSIX上的char,Windows上的wchar_t

所以我得到的是一个const wchar_t *字符串.

以下"适用于我":

    char file[2000];
    wcstombs(file, p.path().c_str(), 2000);
    auto image = SDL_LoadBMP(file);
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个不同的版本,因为这个实现是各种乱码(衰减数组到指针和_CRT_SECURE_NO_WARNINGS).

我正在寻找一个更漂亮的版本,可以直接从路径到const char *在Windows上使用新的C++ 17文件系统.

这是我用过的SDL2项目.

#define _CRT_SECURE_NO_WARNINGS 1
#include <SDL.h>
#include <vector>
#include <filesystem>
namespace fs = std::experimental::filesystem;

int main(int argc, char* argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    auto window = …
Run Code Online (Sandbox Code Playgroud)

c++ c++17

1
推荐指数
1
解决办法
281
查看次数

标签 统计

c++ ×2

c++17 ×1

lpcstr ×1

winapi ×1