Pregunta

Obtuve una DLL generada en VC6 y usando wstring, y estoy intentando usarlo en un proyecto VC9.En esta DLL hay una clase de nivel superior que manipula wstring, llamado UtfString.

Importé todo correctamente en mi proyecto, pero cuando llamo:

std::wstring test;
UtfString uTest(test);

no se vinculará, incluso si el prototipo de función está en la biblioteca...

El otro problema es que cuando creo un nuevo UtfString y depuro mi aplicación, el nuevo puntero es <Bad Ptr>.

Sospecho que hay un conflicto entre VC6 wstring y VC9 wstring pero no estoy seguro.Quiero evitar modificar el DLL original.

Sería genial si alguien pudiera aclararme las cosas y explicarme cuál es la verdadera razón del problema.

Gracias de antemano por tu respuesta, Boris

¿Fue útil?

Solución

NI LO INTENTES

los diseños de cuerdas son diferentes

no puedes hacer eso.

La clase de cadena es completamente diferente entre VC6 y VC9.

Incluso si pudieras vincularte, lo más probable es que falles.

En VC9, las cadenas tienen una unión que es un búfer de 16 bytes para cadenas pequeñas y un puntero para cadenas st.tamaño()>15.En VC9, las cadenas tienen una unión que es un búfer de 8 wchar para cadenas pequeñas y un puntero para cadenas s.t.tamaño()>7.

en VC6 todo el espacio del búfer de cadena se asigna en el montón.

USTED debe recompilar la DLL si pasa cadenas a través del límite.También hay otros problemas relacionados con los iteradores que son demasiado técnicos para describirlos aquí.

lo siento, tengo que reconstruir

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top