Many member functions of FBX classes may trigger an error. In such a case:
false
.*objectname*->GetStatus().GetErrorString()
returns a string with an error message.*objectname*->GetStatus().GetCode()
retrieves the type of error that occurred as specified in the enumeration.The following code appears in Common/Common.cxx
. It illustrates the error-handling procedure for a file import operation, including password protection. Some code has been replaced by "// ...
" to emphasize the error-handling functionality.
bool LoadScene(FbxManager* pManager, FbxDocument* pScene, const char* pFilename)
{
//…
bool lStatus;
char lPassword[1024];
//…
// Create an importer.
FbxImporter* lImporter = FbxImporter::Create(pManager,"");
// Initialize the importer by providing a filename.
const bool lImportStatus = lImporter->Initialize(pFilename, -1, pManager->GetIOSettings());
// …
if(!lImportStatus)
{
FbxString error = lImporter->GetStatus().GetErrorString();
FBXSDK_printf("Call to FbxImporter::Initialize() failed.\n");
FBXSDK_printf("Error returned: %s\n\n", error.Buffer());
if (lImporter->GetStatus().GetCode() == FbxStatus::eInvalidFileVersion)
{
FBXSDK_printf("FBX file format version for this FBX SDK is %d.%d.%d\n", lSDKMajor, lSDKMinor, lSDKRevision);
FBXSDK_printf("FBX file format version for file '%s' is %d.%d.%d\n\n", pFilename, lFileMajor, lFileMinor, lFileRevision);
}
return false;
}
// …
// Import the scene.
lStatus = lImporter->Import(pScene);
if(lStatus == false && lImporter->GetStatus().GetCode() == FbxStatus::ePasswordError)
{
FBXSDK_printf("Please enter password: ");
lPassword[0] = '\0';
FBXSDK_CRT_SECURE_NO_WARNING_BEGIN
scanf("%s", lPassword);
FBXSDK_CRT_SECURE_NO_WARNING_END
FbxString lString(lPassword);
IOS_REF.SetStringProp(IMP_FBX_PASSWORD, lString);
IOS_REF.SetBoolProp(IMP_FBX_PASSWORD_ENABLE, true);
lStatus = lImporter->Import(pScene);
if(lStatus == false && lImporter->GetStatus().GetCode() == FbxStatus::ePasswordError)
{
FBXSDK_printf("\nPassword is wrong, import aborted.\n");
}
}
// Destroy the importer.
lImporter->Destroy();
return lStatus;
}