# 给程序员的超简指南 v3

## 一句话总结

把 `wrapper_v3.h + wrapper_v3.cpp` 编译成 `wrapper_v3.dll`，我（Aray）用 Python 调它。

---

## 你需要做的事

### 1. 准备环境

- Windows 电脑（有 USB 3.0 口）
- Visual Studio 2010、2013、2015 或更高版本
- 加密狗插上
- 双目相机用 USB 连上

### 2. 解压 SDK

把 `Xhk_demo.zip` 解压到 `D:\xhk_sdk\`（随便什么目录，但路径不要有中文）。

解压后结构：
```
D:\xhk_sdk\
  └── Xhk_demo\Xhk_demo\
        ├── TwoEyeApi\TwoEyeUserApi.h   ← SDK 接口定义
        ├── OpenCV\include\              ← OpenCV 头文件
        ├── OpenMesh\include\            ← OpenMesh 头文件
        └── eigen-3.3.7\                ← Eigen 数学库
```

### 3. 修改 build_v3.bat 顶部的 `SDK_DIR`

打开的 `build_v3.bat`，把第一行改成你实际的 SDK 目录：

```
set SDK_DIR=D:\xhk_sdk
```

### 4. 编译

从开始菜单打开 "VS2015 开发人员命令提示符"（或 VS2010/VS2013 的），cd 到 wrapper 目录，跑：

```
build_v3.bat
```

如果报错说找不到头文件，检查两步：
1. `SDK_DIR` 设对了没？
2. `D:\xhk_sdk\Xhk_demo\Xhk_demo\OpenCV\include\cv\include\cv.h` 文件存在吗？

### 5. 对照硬件确认 4 个运行时参数

`wrapper_v3.cpp` 中有 `【TODO(runtime)】` 标记，需要在真机上确认这些值：

| # | TODO | 如何确认 |
|---|------|---------|
| 1 | `xhCreateObject` 导出名 | 跑 `dumpbin /exports TwoEyeApi.dll \| findstr xhCreate` |
| 2 | `InitUseCam2011` 参数 | 先在真机跑通 Xhk_demo.exe，看它怎么调用的 |
| 3 | 设备型号→硬件类型映射 | 看 Xhk_demo.cpp 里 switch(nType) 的对应关系 |
| 4 | 标定文件加载路径 | 跑 Xhk_demo.exe，看它从哪里读 .clb / .ccf 文件 |

### 6. 运行原始 demo 验证

先跑一遍 `Xhk_demo.exe`，确认：
- ✅ 加密狗绿灯亮了
- ✅ 相机初始化成功
- ✅ 按键扫描出点云
- ✅ STL 文件存到了 `./Data/result.stl`

**这一步必须在编译 wrapper 之前完成**——如果 demo 都不跑通，wrapper 肯定也不通。

### 7. 告诉我结果

编译成功 + demo 跑通后，把 `wrapper_v3.dll` 发回来，告诉我：
1. 4 个 TODO 参数的实际值
2. 图像分辨率 / 格式（1280×1024 灰度还是别的）
3. 标定文件的实际路径和格式

---

## 你不需要做的事 ❌

- ❌ **不需要理解 SDK 内部原理** — 代码都写好了
- ❌ **不需要自己写算法** — 只是桥接 C++ → C
- ❌ **不需要管 Python** — 那是我的事
- ❌ **不需要链接 .lib** — 我们动态加载 DLL
- ❌ **不需要优化性能** — 够用就行

## 总工作量

- ✅ 准备工作 + 改路径 → 10 分钟
- ✅ 编译 → 30 秒
- ✅ 真机测试 → 30 分钟（主要看第一次跑 demo 顺不顺）
- ✅ 回答 TODO 问题 → 10 分钟

**总共约 1 小时搞定。** 有问题随时问。

---

## 常见问题

**Q: 找不到 cv.h / cxcore.h？**
A: `build_v3.bat` 的 OPENCV_INC 路径要指向 OpenCV/include/ 目录：
```
D:\xhk_sdk\Xhk_demo\Xhk_demo\OpenCV\include\
  ├── cv\include\cv.h
  ├── cxcore\include\cxcore.h
  └── highgui\include\highgui.h
```

**Q: 编译报错说找不到 "cv.h"？**
A: 在第 2 个 /I 参数加上 `\cv\include` 的子路径。如果还不行，手动把 cv.h 复制到 wrapper 目录旁。

**Q: OpenMesh 报错？**
A: 如果不涉及彩色版，可以在 stdafx.h 中注释掉 OpenMesh 相关 include。但最好保留编译。
