|
| Autor |
Nachricht |
noname_ Tutorial Leser

Anmeldedatum: 17.01.2008 Beiträge: 29
|
ZiG's Buildertutorial (VB6 zu VB.Net)
Verfasst am: 18.01.2008, 22:15 |
|
|
Folgendes,
ich interessieren mich für das programmieren von einem builder und habe das
Tutorial von ZiG gefunden. Da es in VB6 geschrieben ist dacht ich mir das ich
es mal eben umschreiben könnte, weil es relativ simpel aufgebaut ist. Doch
irgendwie hat mich mein glück verlassen und ich habe an allen ecken und
enden probleme. Ich werde hier, wie ZiG es schon gemacht hat, jeden schritt
einzeln schreiben und meine probleme dokumentieren.
Jedem soll gesagt sein, das ich KEINEN fertigen sourcecode will!
Ich werde hier die Stub methode benutzen.
Als erstes das deklarieren des Strings:
| Code: | | Dim options As New VB6.FixedLengthString(100) |
Ich muss diese Variante nehmen da * 100 bei .Net nich funktioniert.
Nun weisen wir dem String etwas zu, hier ist es (wie im tutorial) textbox1 und Textbox2.
| Code: | options.Value = TextBox1.Text & "#" & TextBox2.Text & "#"
|
Hier musste ich .Value anhängen, da ich options sonst keinen text zuweisen konnte.
Jetzt hängen wir die informationen an die Stub an.
| Code: |
FileOpen(1, (My.Application.Info.DirectoryPath & "\stub.exe"), OpenMode.Binary)
FilePutObject(1, options.Value, LOF(1) + 1)
FileClose(1)
|
Soweit ich weiss, funktioniert das anhängen.
Nun das auslesen:
Als erstes deklarieren wir auch wieder in der Stub die variablen.
| Code: |
Dim cmd() As String
Dim options As New VB6.FixedLengthString(100)
|
Nun wirds interessant:
Ich lese auf diese methode das ende der Stub.
| Code: |
FileOpen(1, ("stub.exe"), OpenMode.Binary)
FileGetObject(1, options.Value, LOF(1) - 99)
FileClose(1)
cmd() = Split(options, "#")
|
Hier bekommen wir die fehlermeldung: Die Datei wird von einem anderen Prozess verwendet...
Also kopieren wir die Stub vorher in eine zweite datei, die nicht in benutzung ist.
| Code: |
IO.File.Copy("stub.exe", "stub2.exe")
|
Jetzt lesen wir wieder aus.
| Code: |
FileOpen(1, ("stub2.exe"), OpenMode.Binary)
FileGetObject(1, options.Value, LOF(1) - 99)
FileClose(1)
cmd() = Split(options, "#")
|
Hier bekommen wir wieder eine Fehlermeldung: Die Variable verwendet
einen Automatisierungtyp, der von Visual Basic nicht unterstützt wird.
Hier komme ich nicht weiter.
Ich hoffe ihr könnt mir helfen.
Vielen dank schonmal. |
|
| |
|
 |
Marduk_ « Moderator »

Anmeldedatum: 17.06.2007 Beiträge: 389
|
Verfasst am: 05.02.2008, 21:38 |
|
|
Versuch doch mal mit der IO-Klasse zu arbeiten, ist imo leichter mit zu arbeiten als mit dem VB6 Style.
Sprich mit dem filestream die stub in einem Puffer laden, die Daten einfügen. Und das ganze wieder in eine neue Datei schreiben.
Ich hab es auch schon mal probiert, funktionierte aber nicht allzugut. kA ob man wegen dem CLR-Code die Daten nicht ans Ende dranhängen darf, sondern in einen "Whitespace" einfügen muss.  |
|
| |
|
 |
noname_ Tutorial Leser

Anmeldedatum: 17.01.2008 Beiträge: 29
|
Verfasst am: 07.02.2008, 16:24 |
|
|
Problem gelöst ( Mit der VB6 Methode )
Builder:
| Code: | Imports System.Runtime.InteropServices
Public Class Form1
Dim options As New VB6.FixedLengthString(100)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
options.Value = TextBox1.Text & "#" & TextBox2.Text & "#"
FileOpen(1, (My.Application.Info.DirectoryPath & "\stub.exe"), OpenMode.Binary)
FilePutObject(1, options.Value, LOF(1) + 1)
FileClose(1)
End Sub
End Class |
Stub:
| Code: | Public Class Form1
Dim file As String
Dim cmd() As String
Dim options As New VB6.FixedLengthString(100)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
TextBox1.Text = cmd(0)
TextBox2.Text = cmd(1)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IO.File.Copy("stub.exe", "stub2.exe")
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
FileOpen(1, ("stub2.exe"), OpenMode.Binary)
FileGet(1, options.Value, LOF(1) - 99)
FileClose(1)
cmd = options.Value.Split("#")
IO.File.Delete("Stub2.exe")
End Sub
End Class |
Damit der VB6 Namespace integriert wird, lasst euch einfach vom Codeübersetzer folgendes übersetzen:
| Code: | | Dim options As String * 100 |
Ihr könnt dies danach wieder löschen. |
|
| |
|
 |
|
|