gpt4 book ai didi

c++ - 读取dll文件中的文本文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:30 25 4
gpt4 key购买 nike

设置

Microsoft Visual Studio Professional 2015,在 Windows 10 Pro 上运行
Unity 5.3.1f1 (x64)
该项目建立在 Unity 在其 site. 上提供的示例项目之上。该项目可以找到here.


需要做的事情

我正在考虑创建一个用于 Unity 的 opengl 插件(以 dll 的形式)。在他们的示例代码中,vertexfragment 着色器在代码中是硬编码的,如下所示:

#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" \

我不喜欢这种方法,也不需要它的灵 active 。所以我想将每个着色器放在它们自己的文件中,并使用以下代码加载文件。

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();
}

问题

我的项目的输出是一个 .dll 文件,我希望我的两个着色器包含在该文件中,以便可以加载它们。也许这是不可能的,我不知道。
我已经将着色器添加到项目中。我还右键单击了每个文件并选择了包含在项目中

我不知道这两个文件在哪里结束。它们是否包含在 dll 文件中?如果是,我需要将什么路径传递给 ShaderLoader::ReadShader 以读取它们?

我试图通过使用 GetModuleFileNameFindFirstFile 来解决这个问题,但没有成功。

所以最终的问题是:是否可以在使用 Visual Studio 构建的 dll 库中包含文本文件?如果可以,我该如何处理?

最佳答案

当然可以从 DLL 中读取文件,但不能使用您的代码。这里的问题是您返回一个指向数据的指针,该指针将在函数返回时消失。

shaderCode 变量是ReadShader 函数内部的局部变量,因此一旦函数返回,它当然会被销毁。这种破坏包括释放用于包含的字符串的内存,因此您返回的指针指向不再分配的数据,并且尝试使用该数据将导致未定义的行为

而是返回实际的 std::string 对象并在实际需要时获取指针。或者(但我并不真正推荐)自己分配内存并将字符串复制到内存中,然后返回指向它的指针。

关于c++ - 读取dll文件中的文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35988862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com