处理这些疯狂的字符串和数组令我头疼......
到目前为止,这是我的代码
wchar_t mypath[MAX_PATH];
wchar_t temppath[MAX_PATH];
GetModuleFileName(0, mypath, MAX_PATH);
GetTempPath(MAX_PATH, temppath);
CreateDirectory(???, NULL);
Run Code Online (Sandbox Code Playgroud)
前两个Windows API函数使用LPWSTR变量.第三个使用LPCWSTR.有什么主要区别?在我获得TEMP目录的路径后,我想在其中创建一个名为"test"的新目录.这意味着我需要将(L"test")追加到我的"temppath"变量中.有人可以给我一些关于如何使用这些数组的技巧.这就是让C++变得痛苦的原因.为什么不能每个人都只选择一种数据类型的字符串.wchar_t如何有用?这很难使用和操纵.
多谢你们!
整个代码片段......
#include <windows.h>
#include <string>
#include <vector>
using namespace std;
//=========================================================
// Globals.
HWND ghMainWnd = 0;
HINSTANCE ghAppInst = 0;
struct TextObj
{
string s; // The string object.
POINT p; // The position of the string, relative to the
// upper-left corner of the client rectangle of
// the window.
};
vector<TextObj> gTextObjs;
// Step 1: Define and implement the window procedure.
LRESULT CALLBACK
WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// Objects for painting.
HDC …Run Code Online (Sandbox Code Playgroud) 我正在从我下载的一些代码中重写一个C++方法.该方法最初将PCWSTR作为参数,然后提示用户输入文件名.我修改了方法以获取两个参数(均为PCWSTR)而不是提示用户.我已经在其他地方生成了文件列表.我试图用我的迭代文件列表的方法中的两个参数调用我的新(修改)方法.
原始方法使用StringCBGetsW命令提示用户输入.像这样...
HRESULT tst=S_OK; //these are at the top of the method
WCHAR fname[85] = {0}; //these are at the top of the method
tst = StringCbGetsW(fname,sizeof(fname));
Run Code Online (Sandbox Code Playgroud)
wchar fname被传递给另一个迭代方法.当我看到那个方法时,它说它是LPCWSTR类型; 我假设它可以取代WCHAR.
但它不能做的就是采用该方法获得的PCWSTR.我的最终目标是尝试不提示用户输入文件名,而是取代之前在另一种方法中迭代的文件名.
TL;博士.我有一个PCWSTR,它需要转换为WCHAR.我不知道WCHAR []是什么或如何用它做什么.包括尝试做printf以查看它是什么.
PS ...我知道有更简单的方法来移动和复制文件,有一个原因我试图使用程序来完成这项工作.
我正在使用DirectX9进行一个简单的项目。我对数据类型的转换有些迷惑,并且已经做过一些研究,但是还没有发现任何特别有用的东西。让我们从代码开始:
LPDIRECT3DSURFACE9 LoadSurface(char *fileName, D3DCOLOR transColor)
{
LPDIRECT3DSURFACE9 image = NULL;
D3DXIMAGE_INFO info;
HRESULT result;
result = D3DXGetImageInfoFromFile(fileName, &info);
if (result != D3D_OK) return NULL;
result = d3ddev->CreateOffscreenPlainSurface(
info.Width, //width of the surface
info.Height, //height of the surface
D3DFMT_X8R8G8B8, //surface format
D3DPOOL_DEFAULT, //memory pool use
&image, //reference to image
NULL); //reserved - ALWAYS NULL
//make sure file loaded properly
if (result != D3D_OK) return NULL;
return image;
}
Run Code Online (Sandbox Code Playgroud)
在第6行,我得到了变量fileName的错误:
IntelliSense:“ char *”类型的参数与“ LPCWSTR”类型的参数不兼容
当尝试使用MessageBox时,我在第二个和第三个参数上也得到了完全相同的错误消息:
if (d3ddev == NULL)
{
MessageBox(hWnd, …Run Code Online (Sandbox Code Playgroud)