本帖最后由 d1742647821 于 2026-2-9 14:42 编辑
我在中望2025中使用Utils类中的进度条函数会报错,应该是中望提供了接口但未实现,虽然`ProgressMeter`类的进度条可以用,但是ProgressMeter每次都要从0开始走,无法实现直接跳转到某个进度。
这里使用PE技术导出中望的入口点,使用`PInvoke`实现了相同的3个方法。

再经过一层封装即可进行Auto和中望代码兼容(这里acad和zcad的条件编译符需要在项目中定义好)

---
**测试代码**

![]()
网友答:




网友答:
本帖最后由 你有种再说一遍 于 2026-2-9 19:19 编辑
戴老师牛逼啊
放入IFox了吗?网友答: 技术很强!谢谢分享!网友答: 给戴老师点个大大的赞!
我在中望2025中使用Utils类中的进度条函数会报错,应该是中望提供了接口但未实现,虽然`ProgressMeter`类的进度条可以用,但是ProgressMeter每次都要从0开始走,无法实现直接跳转到某个进度。
这里使用PE技术导出中望的入口点,使用`PInvoke`实现了相同的3个方法。

- #if zcad
- [DllImport("zwcad.exe", EntryPoint = "?zcedSetStatusBarProgressMeter@@YAHPEB_WHH@Z",
- CallingConvention = CallingConvention.Cdecl)]
- private static extern void ZcedSetStatusBarProgressMeter(
- [MarshalAs(UnmanagedType.LPWStr)] string label, int minPos, int maxPos);
- [DllImport("zwcad.exe", EntryPoint = "?zcedSetStatusBarProgressMeterPos@@YAHH@Z",
- CallingConvention = CallingConvention.Cdecl)]
- private static extern void ZcedSetStatusBarProgressMeterPos(int position);
- [DllImport("zwcad.exe", EntryPoint = "?zcedSetStatusBarProgressMeterStop@@YAHXZ",
- CallingConvention = CallingConvention.Cdecl)]
- private static extern void ZcedSetStatusBarProgressMeterStop();
- #endif
再经过一层封装即可进行Auto和中望代码兼容(这里acad和zcad的条件编译符需要在项目中定义好)

- /// <summary>
- /// 进度条
- /// </summary>
- public static class ProgressMeterUtils
- {
- /// <summary>
- /// 设置状态栏进度条
- /// </summary>
- public static void SetApplicationStatusBarProgressMeter(string str, int mixPos, int maxPos)
- {
- #if acad
- Utils.SetApplicationStatusBarProgressMeter(str, mixPos, maxPos);
- #elif zcad
- ZcedSetStatusBarProgressMeter(str, mixPos, maxPos);
- #endif
- }
- /// <summary>
- /// 设置状态栏进度条
- /// </summary>
- public static void SetApplicationStatusBarProgressMeter(int nPos)
- {
- #if acad
- Utils.SetApplicationStatusBarProgressMeter(nPos);
- #elif zcad
- ZcedSetStatusBarProgressMeterPos(nPos);
- #endif
- }
- /// <summary>
- /// 关闭进度条
- /// </summary>
- public static void RestoreApplicationStatusBar()
- {
- #if acad
- Utils.RestoreApplicationStatusBar();
- #elif zcad
- ZcedSetStatusBarProgressMeterStop();
- #endif
- }
- // 上面的代码放到这里
- }
---
**测试代码**

- [CommandMethod(nameof(Test2))]
- public static void Test2A()
- {
- ProgressMeterUtils.SetApplicationStatusBarProgressMeter("开始",0,100);
- for (var i = 0; i < 100; i++)
- {
- ProgressMeterUtils.SetApplicationStatusBarProgressMeter(i);
- Thread.Sleep(50);
- }
- ProgressMeterUtils.RestoreApplicationStatusBar();
- }
网友答:





网友答:
本帖最后由 你有种再说一遍 于 2026-2-9 19:19 编辑 戴老师牛逼啊
放入IFox了吗?网友答: 技术很强!谢谢分享!网友答: 给戴老师点个大大的赞!