C++ 读取dll文件中的文本文件 设置

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

Microsoft Visual Studio Professional 2015,在Windows 10 Pro上运行
统一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中。我仍然不确定这是否可行。