Проблема с неправильным указателем или ссылкой при создании wstring из библиотеки dll vc6

StackOverflow https://stackoverflow.com/questions/1175330

Вопрос

Я получил библиотеку DLL, сгенерированную на VC6 и использующую wstring, и я пытаюсь использовать его в проекте VC9.В этой библиотеке DLL есть класс более высокого уровня, манипулирующий wstring, называемый UtfString.

Я правильно импортировал все в свой проект, но когда я вызываю:

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

он не будет связываться, даже если прототип функции находится в библиотеке...

Другая проблема заключается в том, что при создании новой UtfString и отладке моего приложения новый указатель <Bad Ptr>.

Я подозреваю конфликт между VC6 wstring и VC9 wstring но я не уверен.Я хочу избежать изменения исходной библиотеки Dll.

Было бы здорово, если бы кто-нибудь мог прояснить для меня ситуацию и объяснить, в чем истинная причина проблемы.

Заранее спасибо за ваш ответ, Борис

Это было полезно?

Решение

ДАЖЕ НЕ ПЫТАЙСЯ

макеты строк разные

ты не можешь этого сделать.

Класс string полностью отличается между VC6 и VC9.

Даже если бы вам удалось установить ссылку, вы, скорее всего, потерпели бы крах.

В VC9 строки имеют объединение, которое является 16-байтовым буфером для небольших строк и указателем для string s.t.размер ()>15.В VC9 wstrings имеют объединение, представляющее собой 8 буферов wchar для небольших строк и указатель для string s.t.размер ()>7.

в VC6 все пространство строкового буфера выделяется в куче.

ВЫ должны перекомпилировать библиотеку DLL, если передаете строки через границу.Есть и другие проблемы, касающиеся итераторов, которые слишком технические, чтобы описывать их здесь.

извини, придется перестраиваться

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top