.NET - Textbox Text ausführen? VB 

Status
Für weitere Antworten geschlossen.

Jannik

Registered +
Registriert
Apr. 2008
Beiträge
216
Hi Leute,

ich weiß, ich stelle euch immer die komischsten Fragen, aber folgendes:

Ich starte mein Programm, dort habe eine leere Textbox. Ich tippe da irgendeinen Code ein, z.B. "My.Computer.FileSystem.CopyFile("Text.exe", "*/Test.exe" (Nur kleines Beispiel). So, und genau das, wenn ich auf den Okay-Button klicke, soll nun ausgeführt werden.

Ist das möglich? Oder geht das nicht, weil das vor dem ausführen in den Code eingepflanzt werden muss?

Gruß,

J93
 
Ich verstehe glaub ich nicht richtig, was das jetzt mit meiner Frage tun hat, Brokensword. Oder es kann auch sein, dass ich den Code nicht richtig verstanden hab ;)
 
Da muss ich nile wiedersprechen.
Das geht.
Man ruft zur Lauftzeit den Compiler auf und compiliert das Statement.
Danach öffnet man mit Reflection die erzeugte Assembly und führt die aus.
Ich werde das Programm hier nicht schreiben können, da noch einiges nachzulesen ist.
Es ist aber ein recht interessanter Aspect von .NET.

Einige Dinge die man dazu braucht:
Code:
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
using System.IO;

// Code-DOM tree initialisieren.
CodeNamespace nmspace = new CodeNamespace();
CodeCompileUnit unit1 = new CodeCompileUnit();
unit1.Namespaces.Add(nmspace);

// Proxy code in C#.
CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");

// Assembly Referenzen versehen und compilieren (Die Name System... sind als Beispiel zu sehen
string[] assemblyReferences = new string[2] { "System.Xml.dll", "System.Collections.Generic.dll" };
CompilerParameters parms = new CompilerParameters(assemblyReferences);
TextWriter writer = new StreamWriter("E:\\compiled.cs");
provider1.GenerateCodeFromCompileUnit(unit1, writer, null);
writer.Close();

CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

// Hier ist der Aufruf durch Reflection
Assembly assembly = results.CompiledAssembly;
object o = assembly.CreateInstance([COLOR='Blue']klassenname[/COLOR]);
string s = assembly.ToString();
Type t = o.GetType();
object returnObject = t.InvokeMember([COLOR='Blue']methodenname[/COLOR],
System.Reflection.BindingFlags.InvokeMethod,
null,
o,
new object[] { [COLOR='Blue']laufzeitparameter[/COLOR] });

Ich habe hier gerade kein Compiler zur Hand.
Rauskopieren und Laufenlassen wird also nicht tun.
Aber die notwendigen Befehle und die Struktur passen schon ...

Wenn die Infos nicht reichen, kann ich die nächsten Tage ja mal versuchen lauffähigen Code draus zu machen.

Ist übrigens nicht wirklich von mir.
Die Sachen habe ich mir vor einiger Zeit auch mal aus der MSDN für ein Projekt zusammengesammelt.

Eine Suche nach den Stichworten aus meinen Codefragmenten sollte in der MSDN zu den passenden Artikeln führen.

Hab jetzt mal den Link zur MSN gegoogelt:
http://msdn.microsoft.com/de-de/library/650ax5cx(VS.80).aspx
 
Zuletzt bearbeitet von einem Moderator:
Bitte genau diesen Eintrag löschen.
Hab mich vertan.
Wollte eigentlich oben weitermachen, habe aber einen neune Beitrag erzeugt.
 
Zuletzt bearbeitet von einem Moderator:
Vllt. hilft dir das:
//Forenlink entfernt

Anders geht soetwas meines wissens nach nicht.
 
Zuletzt bearbeitet:
Hmm, ich glaube da könnte ich besser schon Funktionen vorfertigen, also, kann geschlossen werden ;)
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten