This thread has been resolved via PMs. If anyone is interested, the decode function, which is almost identical to the encode function is reproduced below.
Code:
BOOL SpeexDecode(LPCTSTR szInputFile, LPCTSTR szOutputFile)
{
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi = { 0 };
TCHAR szCommandLine[MAX_PATH * 4 + 100];
TCHAR szPath[MAX_PATH];
TCHAR* p;
/* Get the path of the currently running executable
* which is where we expect speexdec to be located. */
GetModuleFileName(NULL, szPath, MAX_PATH);
p = FindLastOf(szPath, TEXT('\\')); p[0] = TEXT('\0');
/* Create command line. */
wsprintf(szCommandLine, TEXT("\"%s\\speexdec\" \"%s\" \"%s\""),
szPath, szInputFile, szOutputFile);
/* Execute command line. */
CreateProcess(NULL, szCommandLine, NULL,
NULL, FALSE, 0, NULL, NULL, &si, &pi);
/* Wait for the command to complete. */
WaitForSingleObject(pi.hProcess, INFINITE);
/* Uncomment this line for debugging, it will show the exact command line used. */
// MessageBox(NULL, szCommandLine, NULL, 0);
/* Cleanup. */
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
return 0;
}