雪山飞狐_lzh 发表于 2009-9-3 19:18:00

 Public Sub Command(ByVal ParamArray args() As Object)<br/>这样声明<br/>

ahopera 发表于 2009-9-3 19:20:00

<p>这个问题已经解决啦,但是为什么&nbsp;&nbsp;&nbsp; </p><p>&lt;CommandMethod("tscr")&gt; Sub TextScr()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim CmdStr() As Object = {"RECTANG", New Point2d(0, 0), New Point2d(1, 1)}</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Command(CmdStr)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Dim doc As Document = Application.DocumentManager.MdiActiveDocument<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'doc.Editor.WriteMessage("\nHi")<br/>&nbsp;&nbsp;&nbsp; End Sub</p><p></p><p>就会出错呢?</p>

ahopera 发表于 2009-9-3 20:20:00

经版主指点,这样的代码可以正确执行:
VB.net Code:
Imports System
Imports System.Runtime.InteropServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.ApplicationServices

Module Example

    <DllImport("acad.exe")> Public Function acedCmd(ByVal vlist As IntPtr) As Integer
    End Function


    Public Sub Command(ByVal args() As Object)
      Dim rb As ResultBuffer
      Dim val As Object
      For Each val In args
            rb = New ResultBuffer()
            If (val Is Nothing) Then
                rb.Add(New TypedValue(CInt(LispDataType.Text), ""))
            Else
                Select Case val.GetType().Name
                  Case "String"
                        rb.Add(New TypedValue(CInt(LispDataType.Text), val))
                        Exit Select
                  Case "Point2d"
                        rb.Add(New TypedValue(CInt(LispDataType.Point2d), val))
                        Exit Select
                  Case "Point3d"
                        rb.Add(New TypedValue(CInt(LispDataType.Point3d), val))
                        Exit Select
                  Case "ObjectId"
                        rb.Add(New TypedValue(CInt(LispDataType.ObjectId), val))
                        Exit Select
                  Case "SelectionSet"
                        rb.Add(New TypedValue(CInt(LispDataType.SelectionSet), val))
                        Exit Select
                  Case "Double"
                        rb.Add(New TypedValue(CInt(LispDataType.Double), val))
                        Exit Select
                  Case "Int16"
                        rb.Add(New TypedValue(CInt(LispDataType.Int16), val))
                        Exit Select
                  Case "Int32"
                        rb.Add(New TypedValue(CInt(LispDataType.Int32), val))
                        Exit Select
                  Case "TypedValue"
                        rb.Add(val)
                        Exit Select
                End Select
            End If
            Try
                acedCmd(rb.UnmanagedObject)
            Catch
            Finally
                rb.Dispose()
            End Try
      Next val
    End Sub

End Module

雪山飞狐_lzh 发表于 2009-9-8 22:48:00

<p>在theswamp看过你的贴了:)</p><p>总结下,解决方案如下</p><p>1、引用acmgdinternal.dll</p><p>Autodesk.AutoCAD.Internal.Utils.TextScr()</p><p>Autodesk.AutoCAD.Internal.Utils.GraphScr()</p><p>2、P/Invoke</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static extern int acedTextScr();</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static extern int acedGraphScr();</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static bool DisplayTextScreen<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (value)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acedTextScr();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acedGraphScr();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void tt1()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DisplayTextScreen = true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void tt2()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DisplayTextScreen = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p></p><p>3、AutoCad2010最简单</p><p>Application.DisplayTextScreen = true;</p>
页: 1 [2]
查看完整版本: .net Api怎么实现Lisp里面(textscr)函数的功能