2016-06-10 12 views
0

Ich habe zwei Probleme mit DLL kompiliert mit VS2015 XP Toolset, wenn von nicht VS2015 exe aufgerufen.Probleme mit DLL kompiliert mit VS2015 XP Toolset

Erste und wichtigste ist, dass in solchen DLL-s tls-Variablen (wie Statik innerhalb Funktion deklariert führt Ergebnisse in GPE auf XP/Server 2003R2). Funktioniert gut unter Windows 7+ und/oder wenn von VS2015 exe aufgerufen. Es sieht so aus, als ob etwas in Runtime nicht initialisiert wird, wenn es so aufgerufen wird.

Das zweite Problem ist mit der Installation von W10SDK/Laufzeit-DLL Seite an Seite. Alles funktioniert gut mit EXE, lädt aber nicht aus dem DLL-Pfad. Sie müssen Runtime installieren oder DLLs in das exe-Verzeichnis kopieren.

Kann jemand vorschlagen eine Lösung vor allem für das erste Problem (zweite ist ärgerlich, aber kann behandelt werden).

+0

Das ist nicht unwahrscheinlich, VS2015 ist das erste, das die Thread-Sicherheitsgarantie implementiert, die C++ 11 für solche Variablen fordert.Ihre CRT verwendet mehrere WinAPI-Funktionen Diese sind unter XP nicht verfügbar und versuchen mitzuhalten, wenn sie feststellen, dass sie nicht verfügbar sind. Sie beziehen sich auf Threading, Gebietsschema und, wie du vermutet hast es, TLS. Vor allem das fehlende FlsAlloc() ist ziemlich nachteilig. Wie gut das auf XP getestet wurde, ist irgendwie zu erraten. Verwenden Sie connect.microsoft.com, um Fehler zu melden. –

Antwort

0

Gefunden ein Duplikat für das erste Problem mit Abhilfe Crash in CAtlStringMgr::GetInstance under Windows XP

Was betrifft zweite - löste es mit einem VS2012 DLL-Proxy zu schreiben, die auf Proxy-Verzeichnis chdirs, lädt die Bibliothek und dann chdirs zurück (und ruft dann durch alle Aufrufe an VS2015 DLL Aber wäre froh, elegantere Lösung zu finden