我目前有一个名为 TextureObject 的类。在创建函数中,我创建纹理,并将类中的 LPCSTR 分配给函数中给定的参数。当我稍后返回该 LPCSTR 时,它以一种意想不到的方式返回。
某些类型名称和函数来自 DirectX 11,请忽略它们。
代码:
h 文件:
class TextureObject
{
public:
ID3D11ShaderResourceView *pTexture;
LPCSTR GetFilename() const { return *FFilename; }
bool IsNotNull;
void CreateTexture(ID3D11Device &dev,LPCSTR Filename);
void ReCreate(ID3D11Device &dev);
void Release();
int relativeId;
private:
LPCSTR *FFilename;
};
.cpp 文件:
void TextureObject::CreateTexture(ID3D11Device &dev,LPCSTR Filename)
{
D3DX11CreateShaderResourceViewFromFile(
&dev, // the Direct3D device
Filename, // load Wood.png in the local folder
NULL, // no additional information
NULL, // no multithreading
&pTexture, // address of the shader-resource-view
NULL); // no multithreading
FFilename = new LPCSTR(Filename);
IsNotNull = true;
}
void TextureObject::ReCreate(ID3D11Device &dev)
{
CreateTexture(dev, *FFilename);
}
在 CreateTexture 函数中使用 vs 2012 调试器时,Filename 调试器值为:
0x0a06fed0 "C:\Users\Utilizador\Desktop\particle.png"
这对我来说是完美的!当我分配班级的 FFilename 时:
FFilename = new LPCSTR(Filename);
没关系。当我在此函数范围内检查 FFilename 的值时,它与 Filename 的值相同。但是当我使用 GetFilename 时,事情开始变得疯狂:
= 0x0a06fed0 "îþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþü =I.C"
嗯,我刚认识你,这很疯狂,但是……这是我的价值。麦凯?
好吧,请帮助我。谢谢你