Laden...

32Bit- und 64Bit-dll dynamsich referenzieren

Erstellt von smichae vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.207 Views
S
smichae Themenstarter:in
260 Beiträge seit 2007
vor 13 Jahren
32Bit- und 64Bit-dll dynamsich referenzieren

Hallo,

ich eine Anwendung in Verbindung mit der redemption.dll für den Zugriff auf Outlook.
Da es aber nicht direkt um die dll geht habe ich gedacht das ich hier vielleicht besser aufgehoben bin.
Es gibt neuerdings eine 32Bit-Version und eine 64Bit-Version dieser dll.
Ich möchte in meiner Anwendung dynamisch die jeweilige Version der dll laden, je nachdem ob das System 64Bit ist oder 32Bit.

Wie kann ich das bewerkstelligen ohne 2 getrennte Anwendungen erstellen zu müssen?

Per GetNativeSystemInfo lese ich aus, ob es ein 32Bit- oder 64Bit-System ist.

Ich kann nicht beide dlls gleichzeitig referenzieren, da beide genau gleich heißen, also nicht im Windows sondern im VS(Interop.Redemption).

Vielen Dank für Eure Hilfe.

Mfg
Michael

1.665 Beiträge seit 2006
vor 13 Jahren

Ich denke, es gibt keine andere Möglichkeit, als zwei verschiedene Programme auszuliefern. Du musst lediglich die entsprechende Redemption DLL beifügen, ohne die Anwendung neu zu kompilieren.

Du könntest die Assembly auch dynamisch laden und per :::

849 Beiträge seit 2006
vor 13 Jahren

Hallo,

ich habe das mal mit sql Server Ce gemacht.. da gibts auch eine 64 bit und eine 32 Bit dll. Ich habe beide dlls in verschiedenen unterverzeichnissen mitgeliefert, und bei Programmstart einfach die richtige dll ins Programmverzeichnis kopiert.

Hat geklappt, hat mir aber auch nie so richtig gefallen.

S
smichae Themenstarter:in
260 Beiträge seit 2007
vor 13 Jahren

Also vorerst werde ich es wahrscheinlich so machen wie "unconnected" geschrieben hat.
Aber auf Dauer ist die Frage ob es nicht noch eine bessere Lösung gibt.

Danke für Eure Hilfe.

Grüße
Michael

1.130 Beiträge seit 2007
vor 13 Jahren

Für mich funktioniert folgender befehl bei programmstart recht gut:


            Environment.CurrentDirectory = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
                (IntPtr.Size * 8).ToString());

Erstell einfach einen ordner mit namen 64 und einen mit namen 32. Die dlls werden nach dieser zeile im jeweils richtigen ordner gesucht.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

3.971 Beiträge seit 2006
vor 13 Jahren

Wenn deine Anwendung auf "Any CPU" steht und die Interop.Redemption 32 und 64Bit jeweils den gleichen starken Namen (Assemblyname, Kultur, Version, Token) hat sollte das laden eigentlich klappen. Es sollte auch egal sein, mit welcher Variante du die Anwendung kompilierst.

Für DLLImport kann man folgendes verwenden:
const Variable in Generics verwenden

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...