Я, конечно, ни разу не спец по .NET, но, по-моему, сама структура создаваемого ResultBuffer какая-то "не та". Разве ListBegin и ListEnd не должны образовывать пары? Да и точечная пара, кажется, должна организовываться по принципу
rb.Add(new TypedValue((int)LispDataType.ListBegin));
rb.Add(new TypedValue((int)LispDataType.Text, "Text"));
rb.Add(new TypedValue((int)LispDataType.DottedPair));
rb.Add(new TypedValue((int)LispDataType.Text, "Name"));
rb.Add(new TypedValue((int)LispDataType.ListEnd));
Как ни странно, но ты прав, Лёша.
Хотя в ObjectARX не так (и последовательность у
vildar82 правильная). Честно говоря как они это сделали - ума не приложу. Зная как в ObjectARX мне бы в голову не пришло проверять то как ты написал (т.е. чисто лисповский вариант).
Работает вот такой код:
[CommandMethod("TestInvoke")]
public void TestInvoke()
{
ResultBuffer rb = new ResultBuffer(new TypedValue[]
{
new TypedValue((int)LispDataType.Text, "TestLispFunc"),
new TypedValue((int)LispDataType.ListBegin),
new TypedValue((int)LispDataType.ListBegin),
new TypedValue((int)LispDataType.Text, "Name"),
new TypedValue((int)LispDataType.DottedPair),
new TypedValue((int)LispDataType.Text, "Test"),
new TypedValue((int)LispDataType.ListEnd),
new TypedValue((int)LispDataType.ListBegin),
new TypedValue((int)LispDataType.Text, "Length"),
new TypedValue((int)LispDataType.DottedPair),
new TypedValue((int)LispDataType.Int16, 1000),
new TypedValue((int)LispDataType.ListEnd),
new TypedValue((int)LispDataType.ListEnd)
}
);
var res = Application.Invoke(rb);
}
vildar82Обрати внимание на отличие строки с число 1000 у меня в коде и у тебя.