Σάββατο 21 Μαΐου 2016

Αναθεώρηση 20 (Έκδοση 8.1) Μετατροπή σε dll

Αποφάσισα να κάνω την γλώσσα να τρέχει σε άλλες γλώσσες ως αντικείμενο, καθώς επίσης και η ίδια να ανοίγει άλλες γλώσσες (script) και να δίνει το περιβάλλον της ως αντικείμενο.

Εδώ ανοίγουμε τη javascript μέσα από την Μ2000, και αυτή καλεί την Μ2000,


clear
declare vs "MSScriptControl.ScriptControl"
declare Alfa Module
Print Type$(Alfa)
With vs, "Language","Jscript", "AllowUI", true
Method vs, "Reset"
Print Type$(Alfa)
Method vs, "AddObject", "M2000", Alfa
method vs, "ExecuteStatement", {
            M2000.AddExecCode("Function BB {=1234 **number} : k=2");
            M=M2000.ExecuteStatement("Print 1234, BB(k)");
            M2000.AddExecCode("aa$=key$");
}
Method vs, "eval", {"hello there"} as X$
Print X$
Method vs, "eval", {"hello there too"} as X$
Print X$
list
declare vs nothing




Το ίδιο Script Control δίνει  και VBScript. Φτιάχνουμε μια Sub που τρέχει σε VBScript αλλά τυπώνει στην Μ2000, στην κονσόλα της!


clear
declare vs "MSScriptControl.ScriptControl"
declare Alfa Module
Print Type$(Alfa)
With vs, "Language","Vbscript", "AllowUI", true
Method vs, "Reset"
Method vs, "AddObject", "M2000", Alfa
X=0
Method vs, "AddCode",{
      sub mine(b)
            for i=1 to b
                  M2000.AddExecCode "Print "+cstr(i) +","
            next
            M2000.AddExecCode "X="+cstr(123456)
      end sub
}
method vs, "ExecuteStatement", "mine 50"
Print X
declare vs nothing



Επίσης τώρα υπάρχει Installer (Inno Setup) που βάζει και εικονίδιο στην επιφάνεια εργασίας και κάνει το απαραίτητο Regsvr32 στο m2000.dll


Παρακάτω έχουμε την περίπτωση σύνδεσης με το m2000.dll το οποίο δίνει ένα αντικείμενο M2000.callback

Σε VB6
' at module level
Dim m As New M2000.callback


' in a load or sub main
m.Run "start"


' We can start with clear console, program, variables (but not stack, use Flush)
' Clear for variables and New for clear program and static variables
Dim a$
If m.Status < 0 Then Exit Sub
m.ExecuteStatement "Start"
again:
If m.Status = 0 Then


m.Run "show :repeat { clear cmd$ :print $(0), {M2000>}; : line input cmd$ : print" + vbCrLf + " inline cmd$" + vbCrLf + "} always", False


End If
If Abs(m.Status) = 1 Then
' Use m.ErrorEn for errors in english
a$ = m.ErrorGr
m.Reset
m.Run "Print : Print {" + a$ + "}"
GoTo again
End If
F1.Caption = m.Eval(CStr(Timer))
m.ShowGui = False
m.Reset


Debug.Print "ok".




Άλλη περίπτωση:
μπορούμε να πάρουμε εξαγωγή από παράσταση
a= m.Eval("100*500")


Γρήγορο άνοιγμα:

Sub cli()
If m.Status = 0 Then
'm.cli "", "CLI>"
m.cli "c:\note1.gsb"
m.Reset
End If
End Sub


ή

Sub cli()
If m.Status = 0 Then
m.cli "", "CLI>"
m.Reset
End If
End Sub








Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.