Проблема с неправильным указателем или ссылкой при создании wstring из библиотеки dll vc6
-
19-09-2019 - |
Вопрос
Я получил библиотеку 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, если передаете строки через границу.Есть и другие проблемы, касающиеся итераторов, которые слишком технические, чтобы описывать их здесь.
извини, придется перестраиваться