Delphi 2010 вариант с проблемой Unicode - PullRequest
0 голосов
/ 17 марта 2010

Я работаю над DLL в Delphi 2010. Она экспортирует процедуру, которая получает массив вариантов. Я хочу иметь возможность взять один из этих вариантов и преобразовать его в строку, но я продолжаю получать ?????

Я не могу изменить входную переменную - она ​​должна быть массивом вариантов. Хост-приложение, которое вызывает DLL, не может быть изменено. Написано в Delphi 2006.

Пример кода DLL:

Procedure TestArr(ArrUID : array of variant); stdcall;  
var 
  i: integer;  
  s: string;
begin  
  s:= string(String(Arruid[0]));  
  showmessage(s);  
end;  

Используя D2006, моя DLL работает нормально. Я пытался использовать VartoStr - не повезло. Когда я проверяю VarType, я получаю varString. Любые предложения, как это исправить?

Ответы [ 2 ]

1 голос
/ 17 марта 2011

Ваше хост-приложение отправляет AnsiString, и вы ожидаете, что UnicodeString.
Строки Unicode были введены в Delphi 2009, их нет в Delphi 2006. Как это исправить? Попробуйте [не проверено]:

Procedure TestArr(ArrUID : array of variant); stdcall;  
var 
  i: integer;  
  s: AnsiString;
begin  
  s:= Ansistring(VarToStr(Arruid[0]));  
  showmessage(s);  
end;  

или, может быть, [также не проверено]:

Procedure TestArr(ArrUID : array of variant); stdcall;  
var 
  i: integer;  
  s: AnsiString;
begin  
  s:= Ansistring(AnsiString(Arruid[0]));  
  showmessage(s);  
end;  

Вы также можете проверить, есть ли функция, подобная VarToStr, которая принимает AnsiStrings (может быть, в AnsiStrings единице?).

0 голосов
/ 28 марта 2010

1 / Как вы вызываете функцию VarToStr()? VarToString(Arruid[0])?

2 / Ваше приложение Delphi2006 отправляет AnsiString или WideString в DLL? Если это так, и если (1) не работает, попробуйте привести к AnsiString вместо string.

...