乐筑天下

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

C++学习求助

[复制链接]

9

主题

13

帖子

4

银币

初来乍到

Rank: 1

铜币
49
发表于 2014-9-4 20:14:00 | 显示全部楼层 |阅读模式
本人采用.net(VS2008,acad2008, 项目已选用NET Framework 2.0)编写一个简单的lisp函数,编译时出现如下提示:
------ 已启动全部重新生成: 项目: ClassLibrary2, 配置: Debug Any CPU ------C:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\ 2008\acdbmgd.dll" /reference:"C:\Program Files\AutoCAD 2008\acmgd.dll" /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\ClassLibrary2.dll /target:library Class1.cs Properties\AssemblyInfo.cs
编译完成 -- 0 个错误,0 个警告
ClassLibrary2 -> G:\c++bak\ClassLibrary2\ClassLibrary2\bin\Debug\ClassLibrary2.dll
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
而在CAD运行时出现如下错误:System.ArgumentException: 绑定到目标方法时出错。   在 System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo
method, Boolean throwOnBindFailure)
   在 AcMgCommandClass.InvokeWorker(AcMgCommandClass* , MethodInfo mi, Object
commandObject, Boolean bLispFunction)
   在 AcMgCommandClass.InvokeWorkerWithExceptionFilter(AcMgCommandClass* ,
MethodInfo mi, Object commandObject, Boolean bLispFunction)
   在 AcMgCommandClass.Invoke(AcMgCommandClass* ,
gcroot* mi, Boolean bLispFunction)
   在 AcMgCommandClass.CommandThunk.InvokeLisp(CommandThunk* )
错误:ADS 请求错误
不知是如何原因
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-9-4 20:22:00 | 显示全部楼层
代码呢 不要贴一大堆错误提示
回复

使用道具 举报

9

主题

13

帖子

4

银币

初来乍到

Rank: 1

铜币
49
发表于 2014-9-5 20:16:00 | 显示全部楼层
谢谢,代码很简单。
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using System.Runtime.InteropServices; // 用DllImport 需用此命名空间
using System.Reflection; // 使用Assembly 类需用此命名空间
using System.Reflection.Emit; // 使用ILGenerator 需用此命名空间
namespace ClassLibrary2
{
    public class Class1
    {
[LispFunction("bb")]
        public static void bb(ResultBuffer rbArgs)
        {
            if (rbArgs != null)
            {
                string strVal1 = "";
                string strVal2 = "";
                int nCnt = 0;
                foreach (TypedValue rb in rbArgs)
                {
                    if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text)
                    {
                        switch (nCnt)
                        {
                            case 0:
                                strVal1 = rb.Value.ToString();
                                break;
                            case 1:
                                strVal2 = rb.Value.ToString();
                                break;
                        }
                        nCnt = nCnt + 1;
                    }
                }
                Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nName: " + strVal1 + " " + strVal2);               
            }
        }
    }
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-9-5 20:23:00 | 显示全部楼层
LispFunction应该有返回值吧 你可以用TypedValue返回一个值或者用resultbuffer返回一个列表或点对
回复

使用道具 举报

9

主题

13

帖子

4

银币

初来乍到

Rank: 1

铜币
49
发表于 2014-9-7 12:29:00 | 显示全部楼层
谢谢,三楼代码从《Autocad.net开发指南-2012版》抄来,
现改为如下代码:
using System;
using System.Collections.Generic;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using System.Runtime.InteropServices; // 用DllImport 需用此命名空间
using System.Reflection; // 使用Assembly 类需用此命名空间
using System.Reflection.Emit; // 使用ILGenerator 需用此命名空间
namespace ClassLibrary4
{
    public class Class1
    {
        [LispFunction("bb")]
        public string bb(ResultBuffer rbArgs)
        {
            if (rbArgs != null)
            {
                string strVal1 = "";
                string strVal2 = "";
                int nCnt = 0;
                foreach (TypedValue rb in rbArgs)
                {
                    if (rb.TypeCode == (int)Autodesk.AutoCAD.Runtime.LispDataType.Text)
                    {
                        switch (nCnt)
                        {
                            case 0:
                                strVal1 = rb.Value.ToString();
                                break;
                            case 1:
                                strVal2 = rb.Value.ToString();
                                break;
                        }
                        nCnt = nCnt + 1;
                    }
                }
                Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nName: " + strVal1 + " " + strVal2);
                return strVal1;               
            }
        }
    }
}
编译时出现如下错误:
已启动全部重新生成: 项目: ClassLibrary4, 配置: Debug Any CPU ------
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\AutoCAD 2008\acdbmgd.dll" /reference:"C:\Program Files\AutoCAD 2008\acmgd.dll" /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\ClassLibrary4.dll /target:library Class1.cs Properties\AssemblyInfo.cs
G:\c++bak\ClassLibrary4\ClassLibrary4\Class1.cs(18,23): 错误 CS0161: “ClassLibrary4.Class1.bb(Autodesk.AutoCAD.DatabaseServices.ResultBuffer)”: 并非所有的代码路径都返回值
编译完成 -- 1 个错误,0 个警告
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2014-9-8 14:22:00 | 显示全部楼层

按下面的格式
示例,判断字符串是否是由数字组成
  1.         [LispFunction("Tls:IsNumber")]
  2.         public static object IsNumber(ResultBuffer rb)
  3.         {
  4.             var t = new TypedValue((int)LispDataType.T_atom);
  5.             var nil = new TypedValue((int)LispDataType.Nil);
  6.             if (rb == null)
  7.                 return nil;
  8.             var arr = rb.AsArray();
  9.             if (arr.Length != 1 || arr[0].TypeCode != (short)LispDataType.Text)
  10.             {
  11.                 return nil;
  12.             }
  13.             else
  14.             {
  15.                 Regex r = new Regex(@"^\d+(\.)?\d*$");
  16.                 return r.IsMatch((string)arr[0].Value) ? t : nil;
  17.             }
  18.         }
命令: (tls:IsNumber "123")
T
命令: (tls:IsNumber "12a3")
nil
回复

使用道具 举报

0

主题

275

帖子

8

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
275
发表于 2014-9-8 14:59:00 | 显示全部楼层
TypeValue [] tvs = rbArgs.AsArray();
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 21:37 , Processed in 0.440071 second(s), 77 queries .

© 2020-2025 乐筑天下

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