Seit gestern beschäftige ich mich mit der AddIn-Entwicklung für SolidWorks – natürlich lief der Einstieg – x64 sei Dank – nicht reibungslos.
Um Visual Studio 2008 (SP1) für die AddIn-Entwicklung für SolidWorks zu verwenden, sollte man zunächst die Visual Studio 2005 C# Addin Template herunterladen und die Datei SWCharpAddin.zip in den Ordner
%USERPROFILE%\Documents\Visual Studio 2008\Templates\ProjectTemplates
kopieren.
Danach steht die Template über File / New Project / C# zur Verfügung (Visual Studio muss als Administrator gestartet werden):
Nach dem Erstellen des Projekts möchte man nun sehen, was das AddIn bereits tut und drückt F5.
Dies führt zum Start von SolidWorks.
AddIns werden in SolidWorks in dem Fenster “Zusatzanwendungen” im Menü “Extras angezeigt” – wenn wir unser Addin hier suchen, finden wir allerdings... nichts:
Der Grund ist, dass unser AddIn standardmäßig mit der Target-CPU-Einstellung “AnyCPU” compiliert wird, es jedoch explizit mit “x64” kompiliert werden muss. Außerdem muss die AddIn-Assembly im gleichen Ordner wie die sldworks.exe liegen.
Also stellen wir in Visual Studio unter “Build” / “Configuration” auf x64 um (falls diese Konfiguration noch nicht existiert, kann diese von “AnyCPU” kopiert werden und auf x64 umgestellt werden):
Damit die Assembly nach dem Build im Ordner der SolidWorks-Installation landet, stellen wir in den Projekt-Eigenschaften im Reiter “Build” noch den Output-Path um:
Nun können wir also unser SolidWorks AddIn endlich kompilieren und verwenden, also schnell Strg+Shift+B gedrückt, um den Build anzustoßen und... wieder eine Fehlermeldung:
Also Google gebootet und nach “File is not a valid assembly” gesucht, Resultat: KB956933.
Das AddIn verwendet tatsächlich ComRegisterFunctionAttribute und ComUnregisterFunctionAttribute, also nochmal in die Projekt-Eigenschaften, Post-Build-Events und dort die x64-Variante von regasm.exe eingetragen wie im Artikel beschrieben.
Jetzt aber! Strg+Shift+B und...
File "C:\Program Files\SolidWorks (2)\SolidWorks\SwCSharpAddin1.dll" is not a valid assembly.
Nach einigem Suchen bin ich auf des Rätsels Lösung gestoßen:
In den Projekt-Eigenschaften im Reiter “Build” gibt es die Option “Register for COM interop”:
Diese Option verwendet im Hintergrund regasm.exe – allerdings die 32Bit-Variante, weshalb es nicht ausreicht, wie im Artikel beschrieben, nur die x64-Variante in den Post-Build-Events einzutragen – auch der Haken bei “Register for COM interop” muss entfernt werden.
Wenn wir nun nochmals F5 drücken, startet SolidWorks, SwCSharpAddIn1 ist in den Zusatzanwendungen zu finden und beim Klick auf das nun vorhandene Menü “'C# Addin”
können wir uns einen Würfel erzeugen lassen:
Resultat: mit x64 ist man noch immer ein Außenseiter...
Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitte "kicken" sie ihn.
