Automatisch starten

Mar 27th, 2010 | Posted by Anton | Filed under Algemeen, VB

DLL bestanden worden in AutoCAD geladen door het commando NETLOAD. Hierna is de functionaliteit beschikbaar die in deze DLL is geprogrammeerd. De feitelijke commando's die in de DLL zijn gecreëerd, kunnen dan via de commandline worden gestart.

Het is mogelijk om deze DLL's automatisch te laden. Hiervoor dient een Registry sleutel te zijn aangemaakt. Dit wordt nu niet verder beschreven, dat komt later wel.

Het is mogelijk om DLL's te laden via een LISP programma. Als je in één van de support mappen een bestand hebt staan dat acad.lsp of acaddoc.lsp heet, dan wordt deze automatisch geladen door AutoCAD. In dit Lisp-bestand kun je dan je tool laden door middel van de volgende code:

(command "NETLOAD" "C:\\Program Files\\MyTools\\MyTool.dll")

Let hierbij overigens op dat padverwijzingen met dubbele backslashes geschreven worden of met een enkele slash.

Op deze wijze wordt je nieuwe tool direct geladen door AutoCAD. Maar je programma zelf wordt nog niet gestart. Hiervoor duiken we even in de VB.NET code. Als je een DLL maakt, zoals in AutoCAD geladen kan worden, dan wordt deze niet autmatisch gestart. Een uitvoerbaar bestand zou een procedure Sub Main() kunnen bevatten dat zorgt voor het starten. In een Windows Form applicatie wordt het programma gestart door het venster te starten. In een gewone DLL niet. Zie de volgende code:

Imports Autodesk
Imports Autodesk.AutoCAD.Runtime

Namespace MyNameSpace

  Public Class MyClass
    Private Sub MyTool()
      MsgBox("Hier komt code.", vbOK, "Titel")
    End Sub
  End Class

End Namespace

Door een paar kleine aanpassingen kan deze code geschikt gemaakt worden zodat de procedure MyTool() gestart wordt zodra de DLL geladen wordt. Zie de volgende code:

Imports Autodesk
Imports Autodesk.AutoCAD.Runtime

Namespace MyNameSpace

  Public Class MyClass
    Implements IExtensionApplication

    Sub Initialize() Implements IExtensionApplication.Initialize
      Call MyTool()
    End Sub

    Sub Terminate() Implements IExtensionApplication.Terminate
    End Sub

    Private Sub MyTool()
      MsgBox("Hier komt code.", vbOK, "Titel")
    End Sub
  End Class

End Namespace

Door gebruik te maken van  de Interface IExtensionApplication zul je twee procedures moeten hebben, namelijk Initialize() en Terminate(). Deze worden aangeroepen bij het laden van een DLL waardoor alles wat binnen de procedure Initialize() wordt aangeroepen, zal worden uitgevoerd. Zo ook een Call naar de procedure MyTool().

In plaats van een MessageBox is het ook mogelijk om een Form te laden bijvoorbeeld. Mogelijkheden genoeg!

No comments yet.