我正在使用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
时。有任何建议如何解决这个问题?
答案 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
。