2016-08-12 1 views
0

Also habe ich seit einiger Zeit eine C# -Anwendung unter Visual Studio 2015 erstellt. Zu Beginn habe ich Klassen geschrieben, um über USB-Bibliotheken des Herstellers mit Hardware zu interagieren, und jetzt bin ich auf der höheren Ebene und schreibe Kurse für MatLab-Datenverarbeitung.Kann die Anwendung nicht unter Any CPU-Plattform kompiliert werden, wenn eine bestimmte x64-Bibliothek verwendet wird?

Als ich die Klassen implementierte, um mit der Hardware zu interagieren, fand ich heraus, dass einige der Bibliotheken auf x86 oder x64 ausgerichtet waren und das Kompilieren gegen die eine oder andere Plattform die Nutzung der Bibliotheken, die die alternative Plattform nutzten, zunichte machte. Ich fand heraus, dass wenn ich die Any-CPU-Plattform benutzte, die meine Anwendung kompilieren würde, was mich einfach zufrieden machte und ich zu der Zeit nicht weiter hineingelesen habe.

Dies ist möglich richtig? Sie können x86 und x64 Bibliotheksnutzung mischen? Oder habe ich die Dokumentation ernsthaft falsch gelesen?

Obwohl jetzt ist ich zu dem Punkt gekommen, dass ich eine Bibliothek MWArray genannt verwenden möchte, die von MathWorks zur Verfügung gestellt wird, um Daten zu und von Matlab-Skripte zu übertragen, die Bibliotheken auf .NET über den MATLAB Compiler SDK Toolbox kompiliert werden.

Nach ein paar Tests habe ich festgestellt, dass die MWArray Bibliothek nur unter x64 kompilieren wird (obwohl ungeprüft stelle ich mir vor, wenn Sie eine x86-Version hätten, würde es das gleiche tun).

Sehen, wie ich gerade x64 und x86-Bibliotheken erfolgreich verwendet, was macht diese Bibliothek speziell, dass es nicht kompilieren unter Any CPU?

Antwort

3

Nein, Sie können 32-Bit- und 64-Bit-Assemblys nicht im selben Prozess mischen.

Sicher, es kann kompilieren, aber es wird definitiv nicht ausgeführt, es sei denn, Sie vermeiden ausdrücklich das Laden der falschen Art der Assembly zur Laufzeit.

Mit anderen Worten, wenn Ihr 64-Bit-Prozess (dh jedes CPU-Programm, das auf einem 64-Bit-Prozessor in einem 64-Bit-Betriebssystem ausgeführt wird) versucht, eine 32-Bit-Assembly zu laden, erhalten Sie eine Ausnahme.

Ebenso, wenn Sie einfach 64 und 32 in der obigen Anweisung wechseln, wird dies für die entgegengesetzte Kombination gelten.

+0

können Sie einige 32-Bit-Assemblys mischen, um auf einem 64-Bit-Betriebssystem zum Beispiel mit dem Oracle.DataClient die 32-Bit-Version läuft auf 64-Bit-Betriebssystem, indem Sie auf x86. – MethodMan

+0

Sie können 32-Bit-Prozesse auf einem 64-Bit-Betriebssystem ausführen, aber Sie können nicht 32-Bit und 64-Bit * im selben Prozess * mischen. –

+0

nach dem Lesen Ihrer Antwort wieder .. Sie sind auf jeden Fall richtig .. Ich habe die ursprüngliche Frage falsch verstanden cheers :) '+ 1' – MethodMan

Verwandte Themen