Bad Zeiger oder Link Problem, wenn wstring von vc6 dll Schaffung
-
19-09-2019 - |
Frage
Ich habe eine DLL erzeugt auf VC6 und mit wstring
, und ich versuche, es in einem VC9 Projekt zu verwenden.
In dieser DLL gibt es eine höhere Ebene Klasse Manipulieren wstring
, genannt UtfString
.
habe ich alles richtig in meinem Projekt importiert, aber wenn ich rufe:
std::wstring test;
UtfString uTest(test);
es wird nicht verknüpfen, auch wenn der Funktionsprototyp in der lib ist ...
Der andere Emittenten ist, dass, wenn eine neue UtfString und debuggen meine app erstellen, der neue Zeiger <Bad Ptr>
.
Ich vermute, dass ein Konflikt zwischen VC6 wstring
und VC9 wstring
aber ich bin mir nicht sicher. Ich möchte vermeiden, dass die Original-DLL zu ändern.
Es wäre toll, wenn jemand die Dinge für mich klar machen könnte, und erklären Sie mir, was der wahre Grund des Problems ist.
Vielen Dank im Voraus für Ihre Antwort, Boris
Lösung
DONT sogar versuchen
die Zeichenfolge Layouts sind unterschiedliche
Sie können das nicht tun.
Die String-Klasse ist etwas ganz anderes zwischen VC6 und VC9.
Auch wenn Sie waren in der Lage Sie zu verknüpfen wird höchstwahrscheinlich zum Absturz bringen.
In VC9 Strings eine Vereinigung, die 16-Byte-Puffer für kleine Strings und ein Zeiger für String S. T. size ()> 15. In VC9 wstrings haben eine Vereinigung, die 8 wchar Puffer für kleine Strings und ein Zeiger für String S. T. size ()> 7.
in VC6 all String-Pufferspeicher auf dem Heap zugeordnet wird.
Sie müssen die DLL neu kompilieren, wenn Sie Zeichenfolgen über die Grenze passieren. Es gibt noch andere Fragen zu Iteratoren in Bezug auf die zu technisch sind hier zu beschreiben.
leid Gotta Wiederaufbau