.NET интерфейс с AutoCAD - ошибки SetXData - PullRequest
1 голос
/ 01 апреля 2010

Я пытаюсь использовать метод SetXData для COM-объекта AutoCAD 2007, но он выдает ошибки.

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 dataTypes = new List();
        List dataStrings = new List();

        /// 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 Ответ

4 голосов
/ 01 апреля 2010

В сообщении об ошибке указывается, что один или оба типа данных при вызове метода SetXData неверны.

У меня нет личного опыта с тем, что вы пытаетесь сделать, но я предлагаю изменить тип данных xDataStrings на массив объектов:

object[] xDataStrings;

Ознакомьтесь с этой веткой на форумах Autodesk. Приведен пример кода .NET, который может вам помочь.

...