| Microsoft DirectX 8.1 (C++) | 
Assembles an ASCII description of a shader into binary form.
HRESULT D3DXAssembleShaderFromFile( LPCTSTR pSrcFile, DWORD Flags, LPD3DXBUFFER* ppConstants, LPD3DXBUFFER* ppCompiledShader, LPD3DXBUFFER* ppCompilationErrors );
If the function succeeds, the return value is D3D_OK.
If the function fails, the return value can be one of the following values.
| D3DERR_INVALIDCALL | 
| D3DXERR_INVALIDDATA | 
| E_OUTOFMEMORY | 
This method supports both Unicode and ANSI strings.
The following example wrapper function, PreprocessAndAssembleShaderFromFile, shows how you can invoke the C preprocessor on your vertex shader code before invoking the assembler with D3DXAssembleShaderFromFile.
HRESULT PreprocessAndAssembleShaderFromFile(
        LPCSTR          szFile, 
        DWORD           Flags,
        LPD3DXBUFFER*   ppConstants, 
        LPD3DXBUFFER*   ppCode, 
        LPD3DXBUFFER*   ppErrors)
{
    char szPath[_MAX_PATH];
    char szTemp[_MAX_PATH];
    char szCmd [_MAX_PATH];
    GetTempPath(sizeof(szPath), szPath);
    GetTempFileName(szPath, "vsa", 0, szTemp);
    _snprintf(szCmd, sizeof(szCmd), "cl /nologo /E %s > %s", szFile, szTemp);
    if(0 != system(szCmd))
        return D3DERR_INVALIDCALL;
    return D3DXAssembleShaderFromFile(szTemp, Flags, ppConstants, ppCode, ppErrors);
}
Note that for this function to work you must have Microsoft® Visual C++® installed and your environment set up so that Cl.exe is in your path.
  Header: Declared in D3dx8core.h.
  Import Library: Use D3dx8.lib.