C++ 无法从.cso文件(DirectX、c+;+;)加载顶点着色器

C++ 无法从.cso文件(DirectX、c+;+;)加载顶点着色器,c++,file,directx,shader,C++,File,Directx,Shader,我正在尝试从先前编译的.cso文件加载顶点着色器 我使用的代码是: char* bytes = { 0 }; size_t fSize = readFileBytes("vsTex.cso", bytes); hr = d3d11Device->CreateVertexShader((void*)bytes, fSize, NULL, &TexVertexShader); if (hr != S_OK){ MessageBox(NULL, "FAIL", "ERROR",

我正在尝试从先前编译的.cso文件加载顶点着色器

我使用的代码是:

char* bytes = { 0 };
size_t fSize = readFileBytes("vsTex.cso", bytes);

hr = d3d11Device->CreateVertexShader((void*)bytes, fSize, NULL, &TexVertexShader);
if (hr != S_OK){
    MessageBox(NULL, "FAIL", "ERROR", NULL);
}
readFileBytes:

  long readFileBytes(const char *name, char* bytes)
    {
        FILE *fl; 
        fopen_s(&fl, name, "r");
        fseek(fl, 0, SEEK_END);
        long len = ftell(fl);
        bytes = (char*)malloc(len);
        fseek(fl, 0, SEEK_SET);
        fread(bytes, 1, len, fl);
        fclose(fl);
        return len;
    }
D3D11设备是指向ID3D11设备的指针。我一直在使用D3D11CompileFromFile()创建顶点着色器,但没有任何错误,因此据我所知,着色器本身没有任何问题


我不确定我是否只是错误地读取了文件,或者在给函数指定字节之前,我是否必须对其执行其他操作。

我注意到的一些事情可能会导致一些问题

long readFileBytes(const char *name, char* bytes)

long readFileBytes(const char *name, char*& bytes) //pass in bytes by reference

fopen_s(&fl, name, "r");

fopen_s(&fl, name, "rb"); //open file in binary mode
最后,不要忘记在创建着色器后释放字节

free(bytes);

通过引用传入字节修复了该问题。谢谢!当然也要使用“rb”选项。你可能会在有用的.Wow中找到“ReadData.h”帮助程序,这花了我一秒钟的时间,但我从某处认出了沃尔伯恩。你的工作太棒了,恰克!