C# 内部错误!scandr.cpp@1952在autocad2015中

C# 内部错误!scandr.cpp@1952在autocad2015中,c#,autocad,C#,Autocad,我正在尝试使用CopyBase和PasteClip命令导出图形以保存另一个图形。但如果发生错误,则无法正常工作。谁能告诉我怎么解决这个问题 我正在像这样使用复制粘贴命令 AcadApplication acadApp; AcadDocument thisdrawing; acadApp = Marshal.GetActiveObject("AutoCAD.Application.20") as AcadApplication; acadApp.Visible = tr

我正在尝试使用CopyBase和PasteClip命令导出图形以保存另一个图形。但如果发生错误,则无法正常工作。谁能告诉我怎么解决这个问题

我正在像这样使用复制粘贴命令

 AcadApplication acadApp;
 AcadDocument thisdrawing;         

 acadApp = Marshal.GetActiveObject("AutoCAD.Application.20") as AcadApplication;
 acadApp.Visible = true;
 thisdrawing= acadApp.ActiveDocument;
 thisdrawing.Activate();
string str = "_CopyBase" + char.ConvertFromUtf32(13) + "0,0,0" + char.ConvertFromUtf32(13) + "M" + char.ConvertFromUtf32(13) + "G" + char.ConvertFromUtf32(13) + "QWERT" + "\n" + char.ConvertFromUtf32(13);
thisdrawing.SendCommand(str);

  string  dwgTempPath = "acad.dwt";
         newThisdrawing = acapp.Documents.Add(dwgTempPath ) ;
         newThisdrawing.SaveAs(expDwgName , thisdrawing.Application.Preferences.OpenSave.SaveAsType,null);
         newDwgCreatBool = true;
         newThisdrawing.Regen(AcRegenType.acActiveViewport);
newthisdrawing.Activate();
comStr = "pasteclip" + "\n" + "0,0" + "\n";
newThisdrawing.SendCommand(comStr);
提前谢谢


通过编辑,我假设这是一个外部exe。考虑到这一点,并对代码进行了一些小的修改,我在控制台exe中实现了这一点,没有任何问题。在编写代码之前,有几点关于它的内容:

我使用4.5框架进行编译。NET的COM引用可能已经用它们的.NET API对应项进行了更新,因此请确保您也是这样。 添加对AutoCAD 2015类型库的COM引用每个语言包都有一个,请选择axdb20enu.tlb,但我认为最终VS可能会在添加后将它们全部选中。 将COM引用添加到AcObjClassImp 1.0类型库,请为版本20 AcObjClassImp20.tlb选择一个 使用AutoCAD添加using语句;和其他人在一起。 以下是我使用的代码:

    static void Main(string[] args)
    {
        IAcadApplication acadApp;
        IAcadDocument thisdrawing;

        acadApp = Marshal.GetActiveObject("AutoCAD.Application.20") as AcadApplication;
        acadApp.Visible = true;
        thisdrawing = acadApp.ActiveDocument;
        thisdrawing.Activate();
        string str = "_CopyBase" + char.ConvertFromUtf32(13) + "0,0,0" + char.ConvertFromUtf32(13) + "M" + char.ConvertFromUtf32(13) + "G" + char.ConvertFromUtf32(13) + "QWERT" + "\n" + char.ConvertFromUtf32(13);
        thisdrawing.SendCommand(str);

        string dwgTempPath = "acad.dwt";
        IAcadDocument newThisdrawing = acadApp.Documents.Add(dwgTempPath);

        //Instead of the path below, use your full path, formatted correctly
        newThisdrawing.SaveAs(@"C:\Acad\Test.dwg", thisdrawing.Application.Preferences.OpenSave.SaveAsType, null);

        newThisdrawing.Regen(AcRegenType.acActiveViewport);
        newThisdrawing.Activate();
        string comStr = "pasteclip" + "\n" + "0,0" + "\n";
        newThisdrawing.SendCommand(comStr);
    }

不过,我以前在复制/粘贴命令中见过这种情况。我记得看到的是数据库的处理方式。你介意展示一下你是如何得到这幅画和这幅画的吗?你要把所有的东西都复制到新的图纸上吗?还有,为什么是COM?需要更多信息。这里有一个链接,指向使用AutoCAD.NET API从一个图形到另一个图形的深度克隆:谢谢bjhuffine先生。上面我已经提到了如何分配此图纸和新图纸。我们已经开发了这个导出工具。从2007年到2014年,它运行良好。但是2015年这个错误就要来了。CopyObjects方法应该比Copy/Paste命令更有效、更可靠。如果图纸中没有QWERT组,会发生什么情况?我尝试了IAcadDocument,但还是出现了相同的错误。。我不知道为什么会发生这样的事情。帮我解决这个问题。你验证过你所有的参考资料是正确的吗?应该有三种:AutoCAD、AXDBLib和ObjClassImpLib。这三个都是通过添加我前面提到的两个COM引用而得到的。当我的公司迁移时,他们会删除以前的版本,因此我无法验证这是否会导致问题,但这似乎是一个合理的假设。您使用的是4.5版本的框架吗?如果您想测试上面的代码,请创建一个控制台应用程序,将代码复制到Main方法中,添加引用,然后它就可以工作了。运行时,请先启动AutoCAD,然后启动console应用程序。您甚至可以在调试模式下运行它。谢谢bjhuffine..我得到了解决方案。。我正在使用thisdrawing.CopyObjectsarrylist,newThisdrawing.ModelSpace,Type.Missing;所以这条线解决了我的问题。。非常感谢。是的,我正确引用了程序集。我只在framework4.5中运行了它。。