我正在尝试在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应用程序中的相同代码工作得很好。我很难过。
答案 0 :(得分:4)
错误消息告诉您调用方法SetXData的一种或两种数据类型不正确。
我对您尝试做的事情没有个人经验,但我建议将xDataStrings的数据类型更改为对象数组:
object[] xDataStrings;
在autodesk论坛上查看this thread。发布了.NET代码示例,可以帮助您。