Ich habe ein Problem, dass ich ziemlich sicher bin, dass ich die Antwort weiß, aber ich dachte, ich würde zumindest fragen und sehen, ob es etwas "Magie bullet "das könnte mir große Kopfschmerzen ersparen.Mischen von 32-Bit und 64-Bit P/Invokes
Hier ist die High-Level-Ansicht.
Ich habe eine verwaltete Anwendung. Diese Anwendung verbindet sich mit Hardware über Drittanbieter-Bibliotheken verschiedener Hersteller. Ich habe die volle Kontrolle über die verwaltete App und Null-Kontrolle über die Hardware-API-Bibliotheken.
Hersteller A bietet nur ein natives 32-Bit-SDK. Um es auf 64-Bit-Systemen zu verwenden, haben wir die Anwendung im 32-Bit-Modus ausgeführt. Alles war gut.
Wir integrieren jetzt mit Anbieter B, der 64-Bit-spezifische native API-Bibliotheken auf 64-Bit-Maschinen bereitstellt. Die native 32-Bit-DLL von Hersteller B funktioniert nicht auf einem 64-Bit-System (dies wurde versucht). Wenn ich einen Test-Kabelbaum baue, der als 64-Bit oder AnyCPU läuft, funktioniert es gut. Wenn ich es als 32-Bit markiere, schlägt es bei den P/Invoke-Anrufen fehl.
Es scheint, dass die Hardware von Hersteller A und Hersteller B sich auf 64-Bit-PCs gegenseitig ausschließen wird, aber ich frage mich, ob jemand Vorschläge hat, wie man das möglicherweise umgehen kann.
Wir haben es bereits in another AppDomain abgesondert, so dass Sicherheit in Ordnung ist. Die Umstellung auf einen anderen Prozess führt zu einer Komplexität der Schnittstelle, die wir vermeiden wollten, aber es scheint entweder so zu sein oder die Hardware von Vendor A aufzugeben. – ctacke
Das ist gut, dass Sie es in einer anderen AppDomain abgesondert haben. Eine AppDomain bietet jedoch nur Sicherheit zwischen verwalteten Code-Komponenten. Unmanaged Code kann fröhlich einen schlechten Zeiger greifen und beginnen, Müll in den gesamten Prozessspeicherbereich unabhängig von AppDomain zu spucken. Sie sollten IPC über Speicherabbilddateien oder eine ähnliche Technik in Erwägung ziehen, damit die Komponenten von Drittanbietern Ihre App nicht zerstören können. :) –