用ARX對ACAD Mechanical版本進行開發發現使用acDocManager->appContextOpenDocument方法時會出現eNotApplicable錯誤,此時調用acDocManager->isApplicationContext會發現此時的Context不在Application中,而appContextOpen必須在ApplicationContext下運行。
最後發現在需要調用到appContextOpenDocument的命令的註冊方法flags參數中加上ACRX_CMD_MODAL就好了。
如:acedRegCmds->addCommand(_T("Test"), _T("Test"), _T("Test"), ACRX_CMD_MODAL|ACRX_CMD_SESSION,Test);
出現此錯誤的原因視乎是在沒有加ACRX_CMD_MODAL時,會將命令的執行Context鎖定到當前文檔,如果要運行需要ApplicationContext環境的函數就會報錯。
另外添加了ACRX_CMD_MODAL後命令的執行效率會不同,同時還有一些其他的限制(具體的我沒有詳細研究,其中有個限制是,在執行一些行爲時會有需要鎖定文檔的要求)。