0

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

4

2 回答 2

1

您的主机应用程序正在发送一个AnsiString并且您的 dll 期待一个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单元中?)。

于 2011-03-17T02:44:25.100 回答
0

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

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

于 2010-03-28T07:05:09.203 回答