C++ 读取dll文件中的文本文件 设置
Microsoft Visual Studio Professional 2015,在Windows 10 Pro上运行C++ 读取dll文件中的文本文件 设置,c++,dll,unity3d,shader,C++,Dll,Unity3d,Shader,Microsoft Visual Studio Professional 2015,在Windows 10 Pro上运行 统一5.3.1f1(x64) 该项目基于Unity提供的一个示例项目,该项目可以在 需要做的事情 我正在考虑创建一个opengl插件(以dll的形式)用于Unity。在示例代码中,顶点和片段着色器在代码中硬编码如下: #define VPROG_SRC(ver, attr, varying) \ ver
统一5.3.1f1(x64)
该项目基于Unity提供的一个示例项目,该项目可以在
需要做的事情 我正在考虑创建一个opengl插件(以dll的形式)用于Unity。在示例代码中,顶点和片段着色器在代码中硬编码如下:
#define VPROG_SRC(ver, attr, varying) \
ver \
attr " highp vec3 pos;\n" \
attr " lowp vec4 color;\n" \
"\n" \
varying " lowp vec4 ocolor;\n" \
"\n" \
"uniform highp mat4 worldMatrix;\n" \
"uniform highp mat4 projMatrix;\n" \
"\n" \
"void main()\n" \
"{\n" \
" gl_Position = (projMatrix * worldMatrix) * vec4(pos,1);\n" \
" ocolor = color;\n" \
"}\n" \
我不喜欢这种方法,也不需要它的灵活性。所以我想把每个着色器放在它们自己的文件中,并使用下面的代码加载文件
const char* ShaderLoader::ReadShader(char *filename)
{
std::string shaderCode;
std::ifstream file(filename, std::ios::in);
if (!file.good())
{
std::cout << "Can't read file " << filename << std::endl;
return nullptr;
}
file.seekg(0, std::ios::end);
shaderCode.resize((unsigned int)file.tellg());
file.seekg(0, std::ios::beg);
file.read(&shaderCode[0], shaderCode.size());
file.close();
return shaderCode.c_str();
}
const char*ShaderLoader::ReadShader(char*filename)
{
std::字符串着色器代码;
std::ifstream文件(文件名,std::ios::in);
如果(!file.good())
{
std::cout当然可以从DLL中读取文件,但不使用代码。这里的问题是,返回一个指向数据的指针,该指针在函数返回时将消失
变量shaderCode
是ReadShader
函数中的一个局部变量,因此一旦函数返回,它当然会被销毁。这种销毁包括释放用于包含字符串的内存,因此返回的指针指向不再分配的数据,尝试使用该数据将导致und明确的行为
相反,返回实际的std::string
对象,并在实际需要时获取指针自己分配内存并将字符串复制到内存中,然后返回指向该字符串的指针。谢谢指针!但这不是我现在的问题。现在我不知道如何引用可能包含的文本文件。它总是在!file.good()上失败。尝试使用完整路径。完整路径是什么?这是一个dll文件,将被添加到Unity项目中,然后构建并存储在上帝知道的地方。另外,如何引用存储在具有完整路径的dll中的文件?这是从dll读取文件的问题的答案吗?可能,这与读取e有关外部文本文档。我希望用一个内部文档来实现它。将它包含在构建的dll中。我仍然不确定这是否可行。