More on late binding

How about an example on how to use scripting capabilities in your application, if the script control is available, without setting any references?

'Attempt to get the type for the script control.
Dim ScType As System.Type = System.Type.GetTypeFromProgID( _
"MSScriptControl.ScriptControl")

'If the prog ID is missing, Null is returned (Nothing in Visual Basic).
If ScType Is Nothing Then

    MessageBox.Show("The Script Control is not available.")

Else

    Dim Sc As Object = System.Activator.CreateInstance(ScType)

    'All is well. Configure the script control: Set language.
    Dim LanguageParameterValue() As Object = {"VBScript"}
    ScType.InvokeMember("Language", Reflection.BindingFlags.SetProperty, Nothing, Sc, _
          LanguageParameterValue, Nothing)

    'Allow UI operation (such as MsgBox).
    Dim AllowUIParameterValue() As Object = {True}
    ScType.InvokeMember("AllowUI", Reflection.BindingFlags.SetProperty, Nothing, Sc, _
          AllowUIParameterValue, Nothing)

    'Finally, set timeout to [forever].
    Dim TimeoutParameterValue() As Object = {-1}
    ScType.InvokeMember("Timeout", Reflection.BindingFlags.SetProperty, Nothing, Sc, _
          TimeoutParameterValue, Nothing)

    'Create a script.
    Dim S As New System.Text.StringBuilder()
    S.AppendLine("For A=1 To 10")
    S.AppendLine("MsgBox A")
    S.AppendLine("Next")

    'Execute the script. Error in the script will raise an exception. Use Try/Catch here.
     Dim Code() As String = {S.ToString()}
     ScType.InvokeMember("AddCode", Reflection.BindingFlags.InvokeMethod, Nothing, Sc, _
          Code, Nothing)

End If

In this example, I showed how to use the script control, if it is available. When you are writing applications that use for example Word or Excel, you might want your application to features from Word, if Word is available, but still be able to run; this is the way. Have fun!

VbsEdit

Detta är kanske lite löjligt att ta upp halvägs in på år 2009, men jag har märkt att det finns personer som producerar grafik med scripting, en del riktigt komplexa saker med typ MathLab eller liknande.

Eftersom jag ändå tänker ta lite bloggpaus nu, för att njuta av solen tillsammans med familjen, så kan jag berätta att jag i min naivitet tror att man kan komma ganska långt med VbsEdit och ett välskrivet COM-bibliotek. VbsEdit är ganska trevlig att jobba med. Den läser lydigt in typbiblioteken när den stöter på en CreateObject, den har auto list members, och den uppdaterar när man komplerar om inne i Visual Studio.

Det andra som jag redan plockar med, som ska bli mitt semesterprojekt, är en image hosting-tjänst på svenska, med ett API man kan ladda hem för att bygga egna applikationer på tjänsten. Det hela består av en hemsida och en web service mot en SQL-databas på serversidan, och en .NET-dll på klientsidan.

Jag hoppas att min nästa post här blir en bild på mig själv där jag njuter i solen.