2010-04-01 189 views
1

我想在AutoCAD 2007 COM對象上使用SetXData方法,但它會引發錯誤。與AutoCAD的.NET接口 - 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(); 
    } 

我得到的錯誤是 「在SetXData方法無效的參數數據。」

錯誤代碼(如果這有助於任何人)是-2145320939。

我發佈的主要原因是因爲在一個非常古老的VB6應用程序中的相同的代碼工作得很好。我很難過。

回答

4

錯誤消息告訴你一個或兩個數據類型在您調用方法SetXData時是不正確的。

我沒有與你想要做什麼,但我建議改變xDataStrings的數據類型對象的數組個人經驗:

object[] xDataStrings; 

退房this thread在Autodesk論壇。示例.NET代碼已發佈,可能對您有所幫助。

+0

是......對象列表(顯然)在COM-Land中不同於字符串列表。謝謝你的褲子踢! – Jerry 2010-04-01 17:04:35