fix(mcp_frame): c++_dll 版本校验默认只比大版本,R24.3 单独分组
- acrxGetApiVersion 返回值编码为 (major<<16)|minor,据此拆分大/小版本 (实测 R22.0=0x160000、R23.0=0x170000)。 - 同一大版本内二进制兼容(R24.0/R24.1/R24.2 可共用 ARX;2019/R23.0 编的 ARX 可跑在 2020/R23.1 上),故默认只比大版本,避免为每个小版本各编一份。 - 唯一例外 R24.3:换了 MSVC toolset,与 R24.0~R24.2 不兼容, 对 major==24 再按 minor>=3 分组判定。 - 同步更新 CODEBUDDY.md 与 ai.memory 说明。
This commit is contained in:
1 parent
0b4ffdec0c
commit
2fa27b1161
2 files changed
+12
-2
No files matched your search
@@ -18,9 +18,19 @@ type: project
|
||||
- **后果**:AutoCAD 以 ARX 加载基座时**会先调用一次**该函数;此后基座再调用得到的是脏值,
|
||||
而 plugins DLL(`LoadLibrary` 加载、无人调用过)首次返回正确值 → 两者不等 → 绝大多数 DLL
|
||||
工具被判为「版本不匹配」而被 `FreeLibrary` 跳过(表现为只注册 9/26)。
|
||||
- **How to apply**:基座侧版本一律用**编译期常量** `(ARX<<16)|SUB_ARX`;**不要**把运行时
|
||||
- **How to apply**:基座侧版本一律用**编译期常量** `ARX`/`SUB_ARX`;**不要**把运行时
|
||||
`acrxGetApiVersion()` 的返回值当版本用。实现见 `mcp_configParser.cpp::LoadDllTool`。
|
||||
|
||||
### 返回值编码 + 「只比大版本」的兼容判定
|
||||
|
||||
- 返回值 = **`(major << 16) | minor`**(大版本=高 16 位,小版本=低 16 位)。实测(反汇编各版本
|
||||
SDK 的 `rxapi.lib`):R22.0 → `0x160000`(0x16=22)、R23.0 → `0x170000`(0x17=23);
|
||||
故 R23.1 → `0x170001`,R24.0 → `0x180000`。
|
||||
- 判定规则:**默认只比大版本**——同一大版本内二进制兼容(如 R24.0/R24.1/R24.2 可共用同一
|
||||
ARX;AutoCAD 2019=R23.0 编的 ARX 可跑在 2020=R23.1 上)。**唯一例外是 R24.3**:它换了
|
||||
MSVC toolset,与 R24.0~R24.2 **不兼容**,故对 `major==24` 再按 `minor>=3` 分一次组。
|
||||
- 若「大小版本全比」,会误拒用同大版本其它小版本 SDK 编的 DLL,逼着为每个小版本各编一份,浪费。
|
||||
|
||||
## 坑 2:DLL 工具写数据库必须先锁文档
|
||||
|
||||
- **事实**:工具执行链 `TcpServerLoop → PostMessage(WM_MCP_EXECUTE_TASK) → ExecuteTaskInMainThread`
|
||||
|
||||
Reference in new issue
Block a user