Hi,
ich bin zwar nicht Oscar, aber grad da.
>> eine dll die für AutoCAD 2008 kompiliert ist, wird nicht unter 2011 laufen. <<
>> Warum eigentlich nicht ?
>> Wenn das Programm mit dot.net_2.0 kompiliert wird und man nur Elemente verwendet
Vom Framework ist es nicht wirklich abhängig, wobei hier schon der erste Unterschied anfängt, denn ab AutoCAD 2010 (glaube ich jetzt, weiss nicht genau) ist AutoCAD Framework3.5 und ab AutoCAD 2012 Framework4 basierend gebaut.
Das mag die Lauffähigkeit der kompilierten App's noch nicht wesentlich stören, aber debuggen wird schon schwierig.
Und ja, wird zumeist lauffähig sein, wenn Du nur Linien verwendest, aber spätestens beim Setzen von Schraffureigenschaften wirst Du feststellen, dass diese (fehlerbedingt in der API, zugegeben) in AutoCAD 2010 und AutoCAD 2011 unterschiedliche Reihenfolgen für den Schraffurwinkel brauchen.
Das ist jetzt nur ein Beispiel für unterschiedliche Signaturen der von AutoCAD zugreifbaren Wrapper der unterschiedlichen AutoCAD-Versionen. Unterschiede in den Signaturen gibt es aber nicht nur durch Fehler, sondern auch, weil Elemente in neueren Versionen mehr können (und daher mehr Info's/Parameter brauchen).
Wenn Du tiefer programmierst, dann verwendest Du auch Invokes ==> und schon sind wir bei der Inkompatibilität zwischen 32bit und 64bit, denn die Invoke-Adressen sind in der 32bit-Version von AutoCAD andere als in der 64bit-Version.
Und als nächstes brauchst Du vielleicht noch diverse COM-Komponenten (weil Du diese von VBA/VB6 gewohnt bist oder unbedingt brauchst) ==> auch hier landest Du sofort im Dilema, denn die Verweise sind zum einen nicht kompatibel, meist gibt es ActiveX-Server nicht unter 64bit ==> für den Fall dass Du Deine DLL mit einer solchen COM-Komponente startest, fliegt die App ab (oder zumindest ins nächste catch ...).
Ich hatte bis jetzt mit Interesse diesen Thread verfolgt und gestaunt über
- 2008-Code geht auch mit 2011 AutoCAD
- 32bit-Code geht auch mit 64bit AutoCAD
Aus eigener Erfahrung kann ich nur empfehlen ==> jeder AutoCAD-Version (auch getrennt in 32bit und 64bit) ihre Applikations-DLL. Dieses ist imho die sauberste Variante.
Auf 'kann gehen' oder 'sollte gehen' habe ich mich schon lange nicht mehr eingelassen und bin sehr gut damit gefahren. (und geht auch ab einer gewissen Größe einer Applikation nicht mehr)
Noch dazu: es müssen ja nicht die Source-Files unterschiedlich sein, Du kannst C#- oder VB-Projekte machen, die auf die gleichen Source-Dateien hingreifen (wo sich keine Adressen wie bei Invoke unterscheiden), aber die Verweise auf die *mgd*.dll sollten der tatsächlichen AutoCAD-Version entsprechen.
So, nun hast Du um eine Meinung mehr als Beiträge in diesem Thread (3 Anwälte ==> 4 Meinungen)
Aber jetzt musste es mal raus.
- alfred -
------------------
www.hollaus.at