.NET接口与AutoCAD - SetXData错误

时间:2010-04-01 16:38:54

标签: .net autocad

我正在尝试在AutoCAD 2007 COM对象上使用SetXData方法,但它会抛出错误。

Example Test:

    public AcadEntity getAcadEntity()
    {
        /// ... Basic code to return a single AutoCAD entity...
    }

    private void btnTagItem_Click(object sender, EventArgs e)
    {
        AcadEntity ent = getAcadEntity();

        short[] xDataType;
        string[] xDataStrings;

        DrawingXData xData = new DrawingXData();

        xData.field1 = "Some Text Goes here";
        xData.field2 = 1;
        xData.field3 = 100;
        xData.field4 = 1509.2;
        xData.field5 = "More Text";

        BuildXData("AutoCad_App_Name", xData, out xDataType, out xDataStrings);

        ent.SetXData(xDataType, xDataStrings); // This line crashes.
    }

    private void BuildXData(string applicationName, DrawingXData xData, 
        out short[] xDataType, out string[] xDataStrings)
    {
        List<short> dataTypes = new List<short>();
        List<string> dataStrings = new List<string>();

        /// Code types...
        /// 1000 == String up to 255 bytes
        /// 1001 == Application Name

        // Set Applicaiton Name
        dataTypes.Add(1001); dataStrings.Add(applicationName);

        // Set Application Data
        dataTypes.Add(1000); dataStrings.Add(xData.field1.ToString());
        dataTypes.Add(1000); dataStrings.Add(xData.field2.ToString());
        dataTypes.Add(1000); dataStrings.Add(xData.field3.ToString());
        dataTypes.Add(1000); dataStrings.Add(xData.field4.ToString());
        dataTypes.Add(1000); dataStrings.Add(xData.field5.ToString());

        // ... etc.

        xDataType = dataTypes.ToArray();
        xDataStrings = dataStrings.ToArray();
    }

public AcadEntity getAcadEntity() { /// ... Basic code to return a single AutoCAD entity... } private void btnTagItem_Click(object sender, EventArgs e) { AcadEntity ent = getAcadEntity(); short[] xDataType; string[] xDataStrings; DrawingXData xData = new DrawingXData(); xData.field1 = "Some Text Goes here"; xData.field2 = 1; xData.field3 = 100; xData.field4 = 1509.2; xData.field5 = "More Text"; BuildXData("AutoCad_App_Name", xData, out xDataType, out xDataStrings); ent.SetXData(xDataType, xDataStrings); // This line crashes. } private void BuildXData(string applicationName, DrawingXData xData, out short[] xDataType, out string[] xDataStrings) { List<short> dataTypes = new List<short>(); List<string> dataStrings = new List<string>(); /// Code types... /// 1000 == String up to 255 bytes /// 1001 == Application Name // Set Applicaiton Name dataTypes.Add(1001); dataStrings.Add(applicationName); // Set Application Data dataTypes.Add(1000); dataStrings.Add(xData.field1.ToString()); dataTypes.Add(1000); dataStrings.Add(xData.field2.ToString()); dataTypes.Add(1000); dataStrings.Add(xData.field3.ToString()); dataTypes.Add(1000); dataStrings.Add(xData.field4.ToString()); dataTypes.Add(1000); dataStrings.Add(xData.field5.ToString()); // ... etc. xDataType = dataTypes.ToArray(); xDataStrings = dataStrings.ToArray(); }

我得到的错误是“SetXData方法中的参数数据无效”。

错误代码(如果这有助于任何人)是-2145320939。

我发布的主要原因是因为很老的VB6应用程序中的相同代码工作得很好。我很难过。

1 个答案:

答案 0 :(得分:4)

错误消息告诉您调用方法SetXData的一种或两种数据类型不正确。

我对您尝试做的事情没有个人经验,但我建议将xDataStrings的数据类型更改为对象数组:

object[] xDataStrings;

在autodesk论坛上查看this thread。发布了.NET代码示例,可以帮助您。