编写代码时出现如下错误:
“const wchar t*”类型的参数与“WCHAR *”类型的参数(又名“wchar_t *”)不兼容
代码:
m_compileshaderfromfile(L"shader.fx", "VS", "vs_4_0", &pVSBlob);
我使用Microsoft Visual Studio 2022,编码是Unicode。像这样尝试过:
代码:
const char* filenamestr = "shader.fx";
WCHAR filename[256];
MultiByteToWideChar(CP_UTF8, 0, filenamestr, -1, filename, sizeof(filename) / sizeof(WCHAR));
m_compileshaderfromfile(filename, "VS", "vs_4_0", &pVSBlob);
但随后shader.fx无法编译。它可能找不到该文件。一般情况下,它返回 0。shader.fx位于包含可执行文件的文件夹中。发布配置。函数声明:
HRESULT m_compileshaderfromfile(WCHAR* FileName, LPCSTR EntryPoint, LPCSTR ShaderModel, ID3DBlob** ppBlobOut);
屏幕:

正如您所看到的,该函数被描述为
那些。第一个参数是一个字符串,其内容可以更改 (
WCHAR* FileName),而您传递的字符串文字则不能更改。解决方案是创建这样一个可变字符串并将其传递,这就是您开始做但没有完成的事情。这会更符合逻辑:
或用于
wcscpy复印。另一方面,我怀疑这一行在函数中并没有真正改变(为什么要更改传递的文件名?!),这只是一个设计疏忽......所以它可以使用
const_cast用于铸造(正是为了这种情况const_cast而创建的)。但这需要保证函数的这种行为。如果你不能给出,最好不要使用cast方法......PS Rfr 从下一个问题中变得很清楚,这是你的功能。然后不要欺骗自己,没有种姓或变量 - 只需将第一个参数声明为
const WCHAR*!