Wir haben in einer Managed DLL eine Routine für Lisp, die einfach ein externes Programm startet, und auf deren Beendigung wartet. (ähnlich dem Lispbefehl (startApp "notepad"), jedoch mit warten auf die Beendigung.
Das funktioniert auch auf den meisten Rechnern (momentan auf ca. 40 Rechhner gestestet). leider kommt jedoch bei manchen Rechnern folgende Fehlermeldung in der Autocad Befehlszeile
Befehl (startapplication "notepad") Anmerkung Notepad startet, und autocad wartet bis zum Schliessen, und dann kommt die fehlermeldung
System.InvalidCastException: Specified cast is not valid.
at Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object
commandObject, Boolean bLispFunction)
at
Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo
mi, Object commandObject, Boolean bLispFunction)
at Autodesk.AutoCAD.Runtime.PerDocumentCommandClass.Invoke(MethodInfo mi,
Boolean bLispFunction)
at Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.InvokeLisp(); Fehler:
Fehler bei ADS-Anforderung
Code:
[LispFunction("StartApplication")]
public Object XCADToolsStartApplication(ResultBuffer args)
{
string tFileName = "";
string tArguments = ""; int i = 0;
foreach (TypedValue rb in args)
{
i += 1;
if ((i == 1) && (rb.TypeCode == RTSTR)) { tFileName = rb.Value.ToString(); }
if ((i == 2) && (rb.TypeCode == RTSTR)) { tArguments = rb.Value.ToString(); }
}
try
{
System.Diagnostics.Process TProcess = new System.Diagnostics.Process();
TProcess.StartInfo.FileName = tFileName;
TProcess.StartInfo.Arguments = tArguments;
TProcess.Start();
TProcess.WaitForExit();
TProcess.Close();
return true;
}
catch (System.Exception)
{
return false;
}
}
Ändere ich nun den Typ der Funktion von
public Object XCADToolsStartApplicationi .. auf
public Boolean XCADToolsStartApplicationi ..
dann funktioniert es wieder auf ALLEN Rechnern.
Aber wie mache ich eine Lispfunktion, die z.B.: nil oder einen String zurückgibt?. Dann muss ich ja den Funktionstyp auf Objekt setzten, weil sonst RETURN einen fehler aufwirft.
Und warum funktioniert es auf 90% der Rechner, und auf 10% nicht ??
[Diese Nachricht wurde von fuchsi am 27. Apr. 2009 editiert.]
[Diese Nachricht wurde von fuchsi am 27. Apr. 2009 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP