Laden...

Visual C# Express Project mit externen x86 und x64 DLLs

Erstellt von Net_Hans vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.278 Views
N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 9 Jahren
Visual C# Express Project mit externen x86 und x64 DLLs

Hallo,

ich habe ein C# Project erstellt, welches ich als x86 und als x64 erzeugen will. In den Einstellungen habe ich glaube soweit alles umgestellt, das beides möglich wäre.

Aber ich habe noch ein Problem mit ein paar externen DLLs von Oracle. Diese habe ich im Project als x86 eingebunden. Wenn ich jetzt beim erzeugen die Variante x64 auswähle, bekomme ich verständlicher Weise die Fehlermeldug, das die Oracle-DLLs als x86 und nicht als x64 vorliegen.

Wie muss ich mein Project einstellen, damit ich beide Versionen der DLLs hinterlegen kann, um je nach zu erzeugender Variante (x86 oder x64) die richten DDL zu verwenden.

Geht das überhaupt?

Die DLLs kommen aus den Oracle Data Access Components (ODAC) welches als x86 und x64 zum Download bei Oracle bereit steht.

Danke für eure Hilfe
mfG Hans

P
660 Beiträge seit 2008
vor 9 Jahren

Hallo,

das nennt sich Late Binding und als Stichwort gebe ich dir noch dynamic

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

6.911 Beiträge seit 2009
vor 9 Jahren

Hallo Net_Hans,

guck mal: 32bit/64bit unmanaged DLL "importen" - wie?
Damit sollte es möglich sein.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 9 Jahren

Hallo Gü,

deinen Ansatz finde ich recht interessant. Wo ich allerdings noch nicht weiterkomme ist, wie sich das mit den Verweisen verhält. Da die besagten DLLs extern sind, muss ich doch irgendwas als Verweis hinterlegen, damit Objekte und Funktionen bekannt sind. Aber damit hinterlege ich ja eine feste Version, welche nicht über die Umgebunsvariable aufgelöst wird.

Könntest du mir diesbezüglich bitte noch einmal weiter helfen?
Danke

P
660 Beiträge seit 2008
vor 9 Jahren

Da die besagten DLLs extern sind, muss ich doch irgendwas als Verweis hinterlegen, damit Objekte und Funktionen bekannt sind.

als Stichwort gebe ich dir noch dynamic

siehe auch hier: Welcher Datenbankprovider für sqlite

Ansonsten gibts noch die möglichkeit mit Assembly.Load

(Wenn ich mich jetzt nicht täusche, müsste es in etwa so gehen. (lange her dass ich latebinding mal gebraucht habe XD))


public void CreateInstance()
{
    var tmpInstance = (MyType)Assembly.Load(/*Path to Dll*/);
    tmpInstance.MyMethod
}

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 9 Jahren

nach etwas rumprobieren, bin ich nun an den Punkt gekommen, wo ich leider noch einmal bischen Nachfragen muss.

Da ich im .Net 3.5 Framework entwickel habe ich bei der Variante mit dem dynamic das Problem, das die DLL microsoft.csharp.dll benötigt wird, welche aber bei .Net 3.5 fehlt. Somit muss ich mich nach eine andere Lösung umsehen.

Auf euer Anraten, habe ich mit dann mit der Methode Assembly.Load beschäftigt, bin aber schon an dem Punkt geschreitert, wo ich zu Begin den Typ angeben muss. In deinem Beispiel "MyType". In allen Beispielen welche ich angesehen habe, wurden hier Interface-Instanzen verwendet um zB. ein Plugin-System um zu setzen. Ich habe auch erfolgreich eine Testanwendung aufgesetzt, in der ich "Testplugins" dynamsich lade um zu verstehen was da genau geschiet, aber wirklich weitergebracht hat mich das nicht ... Ich bin jetzt soweit, das mir bekannt ist, das ich die Methoden der zu ladenden DLL vorab zb als Interface kennen muss um überhaupt im Programmverlauf sauber darauf zugreifen zu können.

Bei meinen DLLs von Oracle habe ich das aber glaube nicht, bzw. ich weiß nicht wo ich diese Information ohne die eigentliche DLL her bekomme.

Könnte Ihr mir bitte noch einmal hilfreich zur Seite stehen?

P
660 Beiträge seit 2008
vor 9 Jahren

Ja, MyType war an dieser falsch gewählt, Sorry, hätte ein Interface sein müssen.

was spricht denn dagegen auf Framework 4.0 umzustellen?

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

16.835 Beiträge seit 2008
vor 9 Jahren

Methoden haben kein Interface, sondern Klassen können eine / mehrere haben.
Aufgrund der Interface-Beschreibung weiß man, was die Klasse bietet; die genaue Implementierung ist einem dabei egal.

Sofern sich Oracle an ADO.NET hält kannst Du die Interfaces nutzen, die ADO.NET für die Kommunikation im System.Data-Namespace vorgesehen hat.
Darunter IDbConnection, IDbCommand, ...

N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 9 Jahren

ganz einfach ... mein Systemadmin ... ich habe die Vorgabe, wenn ich für mich tools auf arbeit schreibe, um mein Alltag zu erleichtern, muss ich mich den Gegebenheiten unterordnen. Auf den Servern auf denen ich aktiv "spielen" darf, ist max .Net 3.5 installiert. Hat irgendwie noch was mit anderen Programmen zu tun, aber warum da genau nur .Net 3.5 installiert wurde weiß ich nicht

@Abt:
diesen Ansatz werde ich jetzt mal verfolgen. Das klingt schon vielversprechend 😃

16.835 Beiträge seit 2008
vor 9 Jahren

In 99% der Fällen schreiben die IT-Admins bestimmte Versionen vor, weil sie a) zu faul sind die neue Version zu installieren oder b) zu faul sind, die neuen Versionen zu testen.
Bei .NET sind aber die Versionen i.d.R. so aufgebaut, dass es zu keinen Komplikationen kommen kann, da Side-By-Side-Support existiert; also ein .NET 3.5 problemlos mit .NET 4.0 existieren kann. Nur selten gibt's Replacements (zB aufgrund von Bugs).

Nur ganz ganz wenige Gründe gibt es (zB bei Banken), dass eine Version nicht installiert werden kann. Zu 99% ist es wie gesagt die Faulheit.
Ich würde es versuchen über den IT-Chef einzutüten. Zur Not muss man eben über 3-4 Ecken gehen. Ich hab bisher alles bekommen was ich wollte - auch wenn sich das unterste Glied in der IT erst gesträubt hat.
Ich bin da aber auch enorm ignorant, wenn ich was nicht krieg was ich will. Dann spricht man eben direkt mit dem Häuptling statt mit dem Indianer 😉 Und spätestens wenn Du den lang genug nervst kriegst Du alles, damit er endlich seine Ruhe hat.

N
Net_Hans Themenstarter:in
70 Beiträge seit 2010
vor 9 Jahren

Hallo,

erst mal zum Thema: Mit euern Tipps konnte ich mein Problem lösten. Es hat alles geklappt.
Danke

Zu dem Admin Thema ... naja solange ich meine Probleme auch ohne Admins gelöst bekomme, gehe ich lieber diesen Weg (solange es eine saubere Lösung ist). So ist es für mich angenehmer als der A***h zu sein, der allen auf die Nerven wegen Kleinigkeiten geht ...

Danke noch mal!
mfG Hans

U
135 Beiträge seit 2009
vor 9 Jahren

Na, zum Glück hast Du keine Vorurteile...

Ich bin da aber auch enorm ignorant, wenn ich was nicht krieg was ich will. Dann spricht man eben direkt mit dem Häuptling statt mit dem Indianer 😉 Und spätestens wenn Du den lang genug nervst kriegst Du alles, damit er endlich seine Ruhe hat.){gray}

Sehr empfehlenswertes Vorgehen - sofern man nicht vorhat, mit den Kollegen jemals wieder zusammenzuarbeiten.

16.835 Beiträge seit 2008
vor 9 Jahren

Es ist ein Unterschied, ob man etwas berechtigt oder unberechtigt fordert. Ich selbst war schon in der IT und habe genug mit echten ITler zutun; kenne die Welt und habe meine berechtigten Vorurteile und Erfahrungen. Ich kenne ITler, bei denen ich mich jederzeit melden kann, die einfach wirklich mit Engagement an der Sache sind und helfen wollen; aber ich kenne leider auch einen Großteil, die einfach immer abblocken und offensichtlich ja nichts tun wollen. Und ist ja nicht so, dass das kein allgemeiner Standpunkt zwischen der Software-Entwicklung und der IT ist.. wa?
Und leider hilft dann meist der Weg über eine Ebene höher, dass manche Leute verstehen, dass man das Zeug für die Arbeit braucht.

Dass ich mir mit dem Weg nicht nur Freunde mache; keine Frage. Aber was hilfts, wenn sonst die eigene Arbeit darunter leidet und am Ende der Firma mehr negatives als positives bringt?

Wir sollten das hier aber nicht zu tief diskutieren.