SolidWorks AddIn-Entwicklung unter Windows Vista x64 mit Visual Studio 2008

Written on May 30, 2009

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):

SWCSharpAddin Template installiert

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:

Kein Addin weit und breit

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):

x64 Konfiguration im Configuration Manager

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:

OutputPath in den Build Settings

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:

File "C:\Program Files\SolidWorks (2)\SolidWorks\SwCSharpAddin1.dll" is not a valid assembly

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":

Register For COM Interop - Stolperfalle deluxe

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"

C# Addin im SolidWorks Menü

können wir uns einen Würfel erzeugen lassen:

Ein Würfel, erzeugt mittels SolidWorks API

Resultat: mit x64 ist man noch immer ein Außenseiter...