.net Assembly mit COM Schnittstelle

Kleinigkeiten, über die man bei 64 Bit Systemen stolpern kann.

Donnerstag 09 Juni 2011 at 9:11 pm. Stichwörter: , , , , ,

Es ist mit .net Mitteln relativ einfach eine Assembly zu erzeugen, die auch über COM (ehm. ActiveX) angesprochen werden kann. Um eine solche .net Assembly in die Registry einzubinden gibt es das Tool "regasm".

In den letzten Jahren habe ich diese Möglichkeit genutzt um zentrale Bibliotheken (z.B. 3D Mathematik) sowohl in .net Programmen, als auch in VB6 Programmen zu nutzen. Bis vor kurzem hat es keine Probleme gegeben. Aber nach der Umstellung auf 64 Bit Systeme klappte dies nicht mehr, wenn man versuchte die DLL über VB Script anzusprechen. Von dem VB6 Programm aus ging es aber noch.

Wo ist also der Unterschied zwischen VB Script und einer VB6 Anwendung?

Die VB6 Anwendung ist eine 32 Bit Anwendung und VB Script läuft in der 64 Bit Umgebung. Dementsprechend wird bei der Suche nach der verwendeten COM Schnittstelle ein unterschiedlicher Pfad in der Registry durchsucht.

Damit 32 Bit Anwendungen und 64 Bit Anwendungen auf die COM Schnittstelle zugreifen können, muss die Assembly sowohl in den 32 Bit Pfad als auch in den 64 Bit Pfad der Registry eingetragen werden. Dazu muss die Assembly zweimal registriert werden. Einmal mit

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe

und einmal mit

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\regasm.exe

Danach klappt es problemlos.