Befehle, die im String stehen ausführen ..

dark_mascot

Grünschnabel
Hallo

ich habe ein Programm geschrieben und wollte jetzt
in einer Textdatei einzelne Schaltflächenreihenfolgen
und eventuell For schleifen als Text hineinspeichern.
Wenn ich nun die Datei einlese liegen die einzelnen
Zeilen als String vor.

Wie schaffe ich es nun, das der Inhalt eines Strings
(enthält VB-Befehle) ausgeführt werden.

Dachte eigendlich das es so gehen könnte,
aber Call klappt da nicht:

Beispiel:

Private Sub CmdAuto1_Click()
Dim testtest As String
testtest = "Call Command10_Click"
'Call testtest
End Sub

Wer kann helfen
 
So einfach wie du dir das vorstellst geht das nicht.

Ich hab hier zwar nur C#-Code zur Verfügung und mags jetzt auch nicht umschreiben, aber Klassen und Methoden sind unter VB.NET gleich, daher sollte es kein Problem für dich ergeben.

Du musst den ausführbaren Code "on the fly" kompilieren, dann das daraus resultierende Assembly (DLL-Datei) laden und kannst diese dann ausführen. Welchen Sinn das in deinem Fall haben soll, weiß ich nicht, da hierfür zuwenige Informationen vorliegen.

Code:
string tempPath = "C:\\";
string executable = @"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe";
string command = @"/out:"+tempPath+"Example.dll /target:library /recurse:"+tempPath+"*.cs /resource:"+tempPath+"codeproject.gif /resource:"+tempPath+"Test.xml";
System.Diagnostics.Debug.WriteLine(command);
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(executable, command);
psi.CreateNoWindow = true;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = psi;
p.Start();

In diesem Fall werden nur mehrere Dinge in die DLL eingebunden. So ein CS-File, eine Grafik und ein XML-File. /recurse ist das was dich hier interessiert. Die /resource Teile kannst im command weglassen.

Das Ergebnis ist eine DLL, die du so laden kannst:
Code:
AppDdaomain newAppDomain = AppDomain.CreateDomain("ExampleDomain");
byte[] rawAssembly = loadFile(@Application.StartupPath + "\\Example.dll");
a = newAppDomain.Load(rawAssembly);
Das Assembly wird in eine eigene AppDomain geladen, damit es später auch wieder released werden kann.

Für die genauen Bedeutungen der Begriffe Assembly, AppDomain etc. bitte Google oder Domain befragen. Ist mir jetzt zuviel das alles zu erklären.
 
Zurück