Появилась идея, как можно это все несложно реализовать. Досточно использовать delayload для dbx-файлов. Например есть файл A.DBX, который зависит от B.DBX. Будем считать, что они все в одном каталоге в путях доступа AutoCAD. Прописываем в VS-проекте в опциях линкера DelayImp.lib /DELAYLOAD:"B.dbx", а в InitAppMsg() вставляем:
// Находим каталог, в котором находится этот dbx-файл
// и формируем путь к B.DBX
char ModuleName[_MAX_PATH+1];
GetModuleFileName(_hdllInstance,ModuleName,_MAX_PATH);
char PathDBX[2*_MAX_PATH+1]; memset(PathDBX,'\0',2*_MAX_PATH+1);
char *send = 0;
if ((send = strrchr(ModuleName,'\\')) != NULL) {
strncpy(PathDBX,ModuleName,send-ModuleName+1);
strcat(PathDBX,"B.dbx");
} else if ((send = strrchr(ModuleName,'/')) != NULL) {
strncpy(PathDBX,ModuleName,send-ModuleName+1);
strcat(PathDBX,"B.dbx");
} else {
strcpy(PathDBX,"B.dbx");
}
// Загружаем B.dbx. Если не удалось его загрузить
// возвращаем AcRx::kRetError, т.е. и этот dbx-файл
// не будет загружен
if (!acrxLoadModule(PathDBX, true))
return AcRx::kRetError;
Аналогично, если B.DBX зависит от A.DBX. Зависимость может быть и более сложной (т.е. A.DBX зависит от B.DBX, C.DBX и т.д., а B.DBX от B.DBX, C.DBX и т.д.). Тут главное, чтобы acrxLoadModule(...) был вызван для всех dbx-файлов до того, как они будут использованы.
Идею проверял в AutoCAD 2004-2006 для одного arx-файла и одного dbx-файла, от которого этот arx-файл зависит - все работает.