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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top