乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 241|回复: 14

PInvoke acdbEntUpd

[复制链接]

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 08:43:01 | 显示全部楼层 |阅读模式
我是脑死亡,需要一只手。
我正在尝试在单个实体上实现更新。
测试平台有点人为的,但你应该明白这个想法(我希望)
我试图编码它以显示回报......
问题是:
选择一个实体后,acdbEntUpd()返回RTERROR(-5001)
和ERRNO为5
,我的头疼,我要睡觉,希望编程仙女能解决这个问题
评论是内联的
  1. [assembly: CommandClass(typeof(KdubTesting.TestCommands))]
  2. namespace KdubTesting
  3. {
  4.     // CodeHimBelongaKdub ©  Jun 2008
  5.     public partial class Kdub_API
  6.     {
  7.         //====================================================================================
  8.         [DllImport("acad.exe", CallingConvention = CallingConvention.Cdecl)]
  9.         public static extern int acdbEntUpd(Int64 adsName);
  10.         //====================================================================================
  11.         /*
  12.           Acad::ErrorStatus acdbGetAdsName(
  13.                 ads_name& objName,
  14.                 AcDbObjectId obj
  15.           );
  16.           This function fills in objName with the ads_name that corresponds to the objId object ID.
  17.           Returns Acad::eOk if successful. If objId is 0, then Acad::eNullObjectId is returned.
  18.        */
  19.         [DllImport("acdb18.dll", CallingConvention = CallingConvention.Cdecl,
  20.         EntryPoint = "?acdbGetAdsName@@YA?AW4ErrorStatus@Acad@@AAY01JVAcDbObjectId@@@Z")]
  21.         public extern static ErrorStatus acdbGetAdsName(out Int64 objName, ObjectId objId );
  22.         //====================================================================================
  23.     }
  24.     // CodeHimBelongaKdub ©  Jun 2008
  25.     public partial class TestCommands
  26.     {
  27.         [CommandMethod("EntUpd")]
  28.         static public void TestacdbEntUpd()
  29.         {
  30.             Document doc = AcadApp.DocumentManager.MdiActiveDocument;
  31.             Editor ed = doc.Editor;
  32.             Database db = doc.Database;
  33.   
  34.             PromptEntityResult res = ed.GetEntity("\nSelect an entity to Regen:");
  35.             ObjectId id = res.ObjectId;
  36.             Int64 adsName;
  37.             ErrorStatus es;            
  38.             using(Transaction tr = db.TransactionManager.StartTransaction())
  39.             {
  40.                 es = Kdub_API.acdbGetAdsName(out adsName, id);
  41.                 ed.WriteMessage("\n adsName is {0} ", adsName);
  42.                 ed.WriteMessage("\n ErrorStatus is {0} ", es);
  43.                 int apiReturn = Kdub_API.acdbEntUpd(adsName);
  44.                 /*
  45.                  * If acdbEntUpd() succeeds, it returns RTNORM  ( 5100 )
  46.                  * otherwise,                it returns RTERROR.(-5001 )
  47.                  * When acdbEntUpd() fails, it sets the system variable ERRNO
  48.                  * to a value that indicates the reason for the failure.
  49.                  */
  50.                 ed.WriteMessage("\n api acdbEntUpd_Return is {0} ", apiReturn);
  51.                 ed.WriteMessage("\n System variable ERRNO  is {0} ", AcadApp.GetSystemVariable("ERRNO"));
  52.                 /*
  53.                  * Returns
  54.                  * Command: EntUpd
  55.                  *Select an entity to Regen:
  56.                  *
  57.                  * adsName is 8793785127955584200
  58.                  * ErrorStatus is OK
  59.                  * api acdbEntUpd_Return is -5001
  60.                  * System variable ERRNO  is 5
  61.                  */
  62.                 tr.Commit();
  63.             }
  64.         }
  65.     }
  66. }        

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2010-6-12 10:56:13 | 显示全部楼层
你会讨厌这个的。
将int64更改为long
adsName为9179526903997960920
error status为OK
api acdbEntUpd_Return为4294962295
系统变量ERRNO为5
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 17:49:23 | 显示全部楼层

谢谢你找布莱斯
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 18:16:36 | 显示全部楼层
注ERRNO的可能值及其含义可能会发生变化。
联机程序错误代码


含义

0
无错误

1
无效的符号表名称

2
无效的实体或选择集名称

3
超过了选择集的最大数量

4
无效的选择集

5
块定义使用不当
6
外部参照使用不当
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 18:46:42 | 显示全部楼层
Bryce,
一个 long 和一个 Int64 是一回事,64 位有符号整数
'long' 只是 Int64 的别名。
事实上,如果我们右键单击“long”并选择“GoToDefinition”,则定义ig是
// 摘要:
// 表示一个 64 位有符号整数。
   [可序列化]
[ComVisible(true)]
公共结构Int64 : IComparable, IFormattable, IConvertible, IComparable
, IEquatable
{ //................
//--------------------------------------------------

一个线索:acdbEntUpd 生成 ERRNO 为 5
当例程返回到 AutoCAD 时,命令Line 中的 ERRNO 命令将报告 2。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 19:12:19 | 显示全部楼层

acdbGetAdsName的'扰频'名称在acdb17.dll32位和acdb18.dll32位中是相同的...
回复

使用道具 举报

jgr

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 2010-6-12 19:30:27 | 显示全部楼层
对不起,我不明白,但是试试:
acdbEntUpd(ObjectId adsName)
我认为adsname=对象
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 19:52:02 | 显示全部楼层
感谢您的查看
也许它应该。
我首先尝试了一下,得到了同样的错误,所以尝试了acdbGetAdsName()
ie:使用
[DllImport(“acad.exe”,CallingConvention = CallingConvention.Cdecl)]
//public static extern int acdbEntUpd(long adsName);
       public static extern int acdbEntUpd(ObjectId objId);

int apiReturn = Kdub_API.acdbEntUpd(id);
我得到
命令: entupd
选择一个实体来重新生成:
api acdbEntUpd_Return是 -5001
系统变量 ERRNO 是 5
完成: 系统变量 ERRNO 是 5
[已添加]
但命令行的 errno 现在是 0,因为它应该是
回复

使用道具 举报

LE3

10

主题

149

帖子

5

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
189
发表于 2010-6-12 19:54:21 | 显示全部楼层
看看这是否有效(从大师那里学到的)。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2010-6-12 20:08:53 | 显示全部楼层

谢谢Luis,我很快会看一下
你知道为什么用long数组作为参数吗??
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-3 13:37 , Processed in 1.331823 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表