Delphi 2010变种为unicode问题

时间:2010-03-17 14:57:47

标签: delphi unicode delphi-2010 variant

我正在使用Delphi 2010中的DLL。它导出一个接收变量数组的过程。我希望能够采用其中一种变体,并将其转换为字符串,但我一直在想?????

我无法更改输入变量 - 它必须是变量数组。 无法更改调用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 个答案:

答案 0 :(得分:1)

您托管的应用程序正在发送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;  

您还可以检查theres是否与接受VarToStr的{​​{1}}一样功能(可能在AnsiStrings单元中?)。

答案 1 :(得分:0)

1 /你如何调用VarToStr()函数? VarToString(Arruid[0])

2 /您的Delphi2006应用程序是否向DLL发送AnsiString或WideString?   如果是,并且如果(1)不起作用,请尝试转换为AnsiString而不是string