读取 dll 文件中的文本文件
Reading text files in a dll file
设置
Microsoft Visual Studio Professional 2015,运行在Windows 10 Pro
Unity 5.3.1f1 (x64)
该项目基于 Unity 在其网站上提供的示例项目构建。该项目可以在这里找到。
需要做的事情
我正在考虑创建一个用于 Unity 的 opengl 插件(以 dll 的形式)。在他们的示例代码中,顶点和片段着色器在代码中硬编码,如下所示:
#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();
}
<小时 />问题所在
我的项目的输出是一个.dll文件,我希望我的两个着色器包含在该文件中,可以在其中加载它们。也许这是不可能的,我不知道.
我已将着色器添加到项目中。我还右键单击每个文件并选择"包含在项目中"。
我不知道这两个文件在哪里结束。它们是否包含在 dll 文件中,如果是,我需要传递给ShaderLoader::ReadShader
什么路径才能读取它们?
我试图通过使用GetModuleFileName
和FindFirstFile
来解决这个问题,但没有成功。
所以最终的问题是:是否可以在使用Visual Studio构建的dll库中包含文本文件,如果是的话,我该怎么做?
从 DLL 读取文件是可行的,但不能使用您的代码。这里的问题是你返回一个指向数据的指针,当函数返回时,该指针将消失。
变量shaderCode
是ReadShader
函数内部的局部变量,因此一旦函数返回,它当然会被破坏。这种销毁包括释放用于所包含字符串的内存,因此返回的指针指向不再分配的数据,并且尝试使用该数据将导致未定义的行为。
而是返回实际的std::string
对象,并在实际需要时获取指针。或者(但不是我真正推荐的东西)自己分配内存并将字符串复制到内存中,并返回指向该字符串的指针。
- 文本文件中的单词链表
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 将值从二维数组输出到文本文件
- 如何使用 c++ 实现并发文件/文本编辑?
- 我需要转换一些代码,以便它适用于输入和输出文件文本
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- 将大型数据文件拆分为多个小文件(文本格式)
- 如何读取输入文件(文本文件)并将输入验证为有效整数
- 从文本文件/文本流中读取Q字符串错误
- 从文本文件(文本解析器)C++中读取行和列的逻辑
- 如何将*.css文件(文本文件)的内容与附加信息存储在新文件中?
- 关于内存映射文件和使用大文件文本编辑器
- 如何在读取文件文本时跳过"n"
- 使用libzip从.zip获取文件(文本除外)