我无法在DLL项目的目录中创建纹理。
我在做
D3DXCreateTextureFromFile(Device, "Sprites/ExpandBlack.png", &BlackTexture);
但这似乎不起作用。但是,如果我像这样做整个路径:
D3DXCreateTextureFromFile(Device, "C:\\Users\\Home\\Documents\Visual Studio 2017\\Projects\\NO\\NO\\Sprites\\ExpandBlack.png", &BlackTexture);
它确实起作用。
我还尝试了../Sprites/ExpandBlack.png, ..\\Sprites\\ExpandBlack.png
等。
感谢您提供任何帮助。
这是Sprites所在的位置,必须与dll“编译”。
答案 0 :(得分:1)
../Sprites/ExpandBlack.png
,..\\Sprites\\ExpandBlack.png
和Sprites/ExpandBlack.png
都引用相同的相对路径。
相对路径追加到进程的工作目录。 DLL使用相同的工作目录。
要获取DLL路径,请参见Get DLL path at runtime
答案 1 :(得分:1)
相对路径相对于进程的当前目录。如果在使用完整路径时可以使用,但是在使用相对路径时不能使用,那么显然您的相对路径没有指向应该指向的位置。很有可能是因为应该访问该文件的进程的当前目录不是应该的目录。
由于我们在这里讨论的是DLL,因此我想问题是,在运行实际上使用DLL的程序时,该程序是从与DLL项目文件所在位置不同的位置启动的。因为项目位于与DLL项目不同的目录中。默认情况下,Visual Studio将使用项目文件所在的目录作为流程的工作目录。您可以在“调试”下的项目属性中更改Visual Studio将使用的工作目录。最有可能的是,您希望将精灵放置在相对于正在使用它们的应用程序而不是应用程序正在使用的某些DLL的位置。另一方面,如果这些精灵实际上已绑定到库,并且需要库运行,则您可能需要考虑将文件嵌入库中,例如,resources,或至少放置这些文件相对于库的访问,并根据DLL的位置而不是使用DLL的进程的当前目录访问它们。要获取DLL的路径,请参阅在user2176127的答案中链接的答案……