Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Bedingte Komplilierung

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Bedingte Komplilierung (774 / mal gelesen)
Stelli1
Ehrenmitglied
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign
MapGuide
autodesk Topobase 2-2014
VS6, VS.net 2010

erstellt am: 09. Feb. 2016 18:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,
ich habe eine DLL die ich in zwei Autodesk Programmen verwenden will.
Einmal in AutoCAD MAP und im Autodesk.Infrastructure.Administrator.
Beide Programme haben im Bezug auf den Bereich Infrastructure die gleiche API mit gleichen Verweisen.
Jetzt möchte ich aber im MAP auch Funktionen nutzen die auf den DWG Bereich (also  Autodesk.AutoCAD.DatabaseServices....) zugreifen. Dazu habe ich die nötigen Verweise (unter anderem accoremgd.dll) eingefügt.
Ich möchte den Code für beide Varianten möglichst gleich halten und bei der Kompilierung entscheiden welches Ziel ich verwenden möchte.
Ich habe eine globale Compiler Direktive eingerichtet. So kann ich unterscheiden welcher Code verwendet wird.

Mir ist nur noch die konkrete Umsetzung nicht ganz klar.

Code:
    Private Sub Dialog_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' Gibt es die Richtungsangabe im Formular
        If Me.Dialog.Controls.Contains("$CTRLORIENTATION") Then
            OrientationButton = New ISCADOrientation_Ctrl
            OrientationButton = Me.Dialog.Controls.ApiItem("$CTRLORIENTATION")
        End If

        ' Lese Winkeleinstellungen aus dem Dokument
        GetDBAngleUnits(_Vollkreis, _Viertelkreis, Me.Document)


        ' Je nach Ausgabe entscheiden
        ' Einstellung projektweit unter 'My Projekt', Registerkarte 'Komplilieren' -> 'Erweitert' das Feld Benutzerdefinierte Konstanten.

#If Target = "Admin" Then
        Dim DialogTools As New DialogPluginAdminTools(Me.Document)
#ElseIf Target = "Client" Then
        Dim DialogTools As New DialogPluginClientTools(Me.Document)
#End If

    End Sub



Würdet ihr das schon auf Klassenebene unterscheiden oder in den einzelnen Funktionen?
Eine zweite Frage wäre noch ob die entstandene DLL auch wirklich alle Dateien aus den Verweisen benötigt oder nur die verwendeten?

Beim Schreiben der Frage kam mir schon der Gedanke das Funktionsweise zu machen.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 09. Feb. 2016 23:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stelli1 10 Unities + Antwort hilfreich

Ich hätte an dieser Stelle 3 DLL's erzeugt, eine für Map3D, eine für AIA und eine dritte, die als Lib für beide herhält und die allgemeinen Teile hält, diese Lib wird in den erstgenannten referenziert.
Das macht dann 2 Solutions, sprich 2 Kompiliervorgänge.

Eine DLL für beides wird imho nicht funktionieren, da es unterschiedliche Verweise gibt, und selbst wenn diese noch keine Exception beim ersten Initialisieren bringen würden, kannst Du Dich nicht der Situatin erwehren, dass in manchen Funktionssignaturen Verweisen nachgegangen wird und dann die Exception zustandekommt (solange Du nicht vollends late-binding betreibst).

Im Code selbst könntest Du sogar innherhalb von Funktionen für einzelne Zeilen auf Compiler-Directiven abfragen wie z.B.

Code:
#if MAP then
...<code for Map3D>
#elseif AIA then
...<code for Infrastructure Administrator>
#endif

... in diesem Fall hast Du zwar den Vorteil, dass Du in VS in den erweiterten Compilereinstellungen dann "benutzerdefinierte Konstante" hast (eben "AIA" oder "MAP") und diese umschaltest; gleichzeitig dann aber den Nachteil, dass die DLL noch immer den gleichen Namen hätte, also immer überschrieben würde.

Darum würde ich entweder ganz sauber 2 Solutions mit 3 DLL's haben oder den gemeinsamen Code statt in einer dritten DLL direkt im VS-Projekt und jedem VS-Projekt seinen Compilerswitch gesetzt.

Hoffe das war verständlich und hilfreich.

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Stelli1
Ehrenmitglied
Verm.-Ing.


Sehen Sie sich das Profil von Stelli1 an!   Senden Sie eine Private Message an Stelli1  Schreiben Sie einen Gästebucheintrag für Stelli1

Beiträge: 1521
Registriert: 17.08.2005

Map 2000-2014, Rasterdesign
MapGuide
autodesk Topobase 2-2014
VS6, VS.net 2010

erstellt am: 10. Feb. 2016 09:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


TB_Label_bearbeiten.png


TB_Autodesk_Fachschalen_Sachdateneditor_Fehler.png

 
Vielen Dank für die Antwort!

Klar am Ende sind es schon mehrere DLLs. Eine Basis, eine Service und je eine DLL für MAP und den Admin.
Mein Problem hier ist das mein Control praktisch hybride Funktionen von MAP und IM bündelt. Im Admin gibt es den Formulardisigner wo das Control natürlich auch auftauchen muss. Hier kann natürlich nichts in einer Grafik "geklickt" werden.
Meine Idee war den gleichen Code in verschiedenen Solutions zur Erstellung der DLLs zu verwenden.
Ein weiteres Problem ist noch das dritte Programm an Bord, der "Autodesk-Fachschalen-Sachdateneditor" (IM Data Editor). Der kann ja die gleichen Projekte wie das MAP öffnen und ist Bestandteil von MAP. Er ist aber im MAP/BIN Ordner abgelegt und hier gibt es keine MAP DLLs.
Gesteuert wird das Laden der Programme ja über die TBP Dateien im BIN Ordner.

Code:
<?xml version="1.0" encoding="utf-8"?>
<PlugIn>

<Default
AssemblyName="Musteranwendung.dll"
Namespace="Musteranwendung"
DocumentKey=""
MapName=""
Priority="100"
ExecutionTargetWeb="false"
ExecutionTargetDesktop="True"
ExecutionTargetAdmin="True"
Company="IB Stelberg"
Author="Wilfried Stelberg"     
/>

  <DocumentStructureUpdatePlugIn  Priority="90"  ClassName="BasisDatenmodell" />
  <DocumentAdminPage ClassName="AdminOptionPage" ExecutionTargetAdmin="True" ExecutionTargetDesktop="false" DMCode="99.99.0" />
  <DocumentOptionPage ClassName="ClientOptionpage" ExecutionTargetAdmin="True" ExecutionTargetDesktop="True" DMCode="99.99.0" />
  <DialogPlugin ClassName="ControlDialogPlugin" ExecutionTargetAdmin="True" ExecutionTargetDesktop="false"  />
 
   
</PlugIn>



Gibt es hier wohl die Möglichkeit die Ausführung im "IM Data Editor" zu verhindern?
Ein Würgaround ist das kopieren der Dateien in den BIN Ordner.

Wilfried Stelberg

------------------
Warum lisp'eln wenn's auch anders geht.
www.ib-stelberg.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 10. Feb. 2016 09:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Stelli1 10 Unities + Antwort hilfreich

Zitat:
Meine Idee war den gleichen Code in verschiedenen Solutions zur Erstellung der DLLs zu verwenden.
Das sollte möglich sein, denn eine VB- oder CS-Datei kann ja in mehreren Projekten geladen sein. Die Aufgabe dann ist nur, dass die verwendeten Funktionen so allgemein definiert sind, dass diese mit allen Verweisen der verschiedenen Projekten zusammenpassen.
Zitat:
Ein weiteres Problem ist noch das dritte Programm an Bord
Sorry, damit hab ich nicht programmiertechnisches (bisher) gemacht, da steige ich leider aus.

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz