在Arx操作中,经常碰到要判断一个ARX是否被加载了,以及需要在程序中动态加载或者卸载一个ARX程序,于是封装了这几个函数 // 检查arx程序是否加载,格式“arxname.arx”,不要路径名 // 返回:RTNORM-已加载 RTERROR-没加载 int YgxAcadUtil::IsArxLoaded(const char* appName) { char tBuf[80]; size_t appL, tBufL, i; int retCode; struct resbuf* rb1, * rb2; appL = strlen(appName); for (rb2 = rb1 = acedArxLoaded(); rb2 != NULL; rb2 = rb2->rbnext) { if (rb2->restype = RTSTR) { retCode = RTNORM; strcpy(tBuf, rb2->resval.rstring); tBufL = strlen(tBuf); if (appL != tBufL) retCode = RTERROR; else { for (i=0; i<appL; i++) { if (toupper(appName[i]) != toupper(tBuf[i])) { retCode = RTERROR; break; } } if (retCode == RTNORM) break; else retCode = RTERROR; } } } acutRelRb(rb1); return retCode; } // 不管arx有没有加载,都可以调用,appName为全路径或在CAD搜索路径范围内 // 正常-RTNORM int YgxAcadUtil::ArxLoad(const char* appName) { char DriveName[_MAX_DRIVE],PathName[_MAX_PATH],FileName[_MAX_FNAME],Ext[_MAX_EXT]; _splitpath(appName, DriveName, PathName, FileName, Ext); char szAppname[80]; sprintf(szAppname, "%s.%s", FileName, Ext); if (RTNORM == YgxAcadUtil::IsArxLoaded(szAppname)) return RTNORM; else return acedArxLoad(appName); } // 不管arx有没有加载,都可以调用,格式“arxname.arx”,不要路径 // 正常-RTNORM int YgxAcadUtil::ArxUnload(const char* appname) { if (RTNORM == YgxAcadUtil::IsArxLoaded(appname)) return acedArxUnload(appname); else return RTNORM; }