Странное поведение строки при вызове dll - PullRequest
5 голосов
/ 22 сентября 2010

У меня есть программа Delphi 2007, которая вызывает DLL-библиотеку Delphi 2010.Программа большая и еще не перенесена на 2010 год, поэтому я не могу изменить это прямо сейчас.

Я использую модуль SimpleShareMem для передачи строк, но также пробовал ShareMem с borlndmm.dll.

Для одной функции я теперь передаю строку из программы Delphi 2007 в dll (следовательно, AnsiString).При отладке dll эта AnsiString выглядит нормально и может быть просмотрена в списке наблюдения.Но если я просто думаю, как

AnAnsiString := PassedAnsiString;

, то переменная AnAnsistring получает значение '???????'#0#0#0'???A', но PassedAnsiString все еще читается в списке наблюдения.Также к строке добавляется, как

AnAnsiString := PassedAnsiString + NotPassedAnsiString;

, в качестве значения используется '???????'#0#0#0'???A'.

В чем проблема?Это выпуск 2007 года <-> 2010?Как это исправить?Спасибо за помощь.

1 Ответ

5 голосов
/ 22 сентября 2010

Это, вероятно, потому что поле кодирования, которое было добавлено к ansistring в D2009. IOW запись (TAnsiRec) с отрицательным смещением указателя ансистринга отличается и сдвигается между Delphi и юникодом, и не юникодом (в версиях юникод также изменилась ансистрина)

Я не думаю, что есть достойное решение для этого, кроме возврата к уровню p (ansi) char

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...