Странное поведение строки при вызове dll

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

Я использую SimpleShareMem Unit для передачи строк, но также пробовал 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? Как это исправить? так что я не могу изменить это прямо сейчас.

Я использую SimpleShareMem Unit для передачи строк, но также пробовал 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? Как это исправить? так что я не могу изменить это прямо сейчас.

Я использую SimpleShareMem Unit для передачи строк, но также пробовал 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? Как это исправить?

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

AnAnsiString := PassedAnsiString;

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

AnAnsiString := PassedAnsiString + NotPassedAnsiString;

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

В чем проблема? Это проблема 2007 <-> 2010? Как это исправить?

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

AnAnsiString := PassedAnsiString;

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

AnAnsiString := PassedAnsiString + NotPassedAnsiString;

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

В чем проблема? Это проблема 2007 <-> 2010? Как это исправить? ??? A ', но PassedAnsiString все еще доступен для чтения в списке наблюдения. Также добавляемая строка вроде

AnAnsiString := PassedAnsiString + NotPassedAnsiString;

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

В чем проблема? Это проблема 2007 <-> 2010? Как это исправить? ??? A ', но PassedAnsiString все еще доступен для чтения в списке наблюдения. Также добавляемая строка вроде

AnAnsiString := PassedAnsiString + NotPassedAnsiString;

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

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

5
задан Marks 22 September 2010 в 09:19
поделиться