現在、TextureObjectというクラスがあります。作成関数では、テクスチャを作成し、クラス内のLPCSTRを関数で指定されたパラメーターに割り当てます。後でそのLPCSTRを返すと、予期しない方法で返されます。
一部の型名と関数はDirectX11のものであり、無視してください。
コード:
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関数でvs2012デバッガーを使用する場合、ファイル名デバッガーの値は次のとおりです。
0x0a06fed0 "C:\Users\Utilizador\Desktop\particle.png"
これは私にぴったりです!クラスのFFilenameを割り当てるとき:
FFilename = new LPCSTR(Filename);
大丈夫です。この関数のスコープ内でFFilenameの値を確認すると、Filenameの値と同じです。しかし、GetFilenameを使用すると、物事がおかしくなり始めます。
= 0x0a06fed0 "îþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþîþü =I.C"
うーん、私はちょうどあなたに会いました、そしてこれはクレイジーです、しかし...これが私の価値です。mKay?
さて、助けてください。ありがとうございました