代码之家  ›  专栏  ›  技术社区  ›  Crudler

Delphi2010 Unicode变体问题

  •  0
  • Crudler  · 技术社区  · 14 年前

    我正在Delphi2010中开发一个动态链接库。它导出接收变量数组的过程。我想把这些变体中的一个转换成一个字符串,但是我一直在得到???????

    我无法更改输入变量-它必须是变量数组。 无法更改调用dll的宿主应用程序。它是用德尔福2006写的。

    示例dll代码:

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

    使用D2006我的动态链接库工作正常。我试过用 VartoStr -运气不好。当我检查 VarType 我得到一个 varString . 有什么解决办法吗?

    2 回复  |  直到 13 年前
        1
  •  1
  •   Rafael Colucci    13 年前

    宿主应用程序正在发送 AnsiString 你的dll需要一个 UnicodeString .
    Unicode字符串是在Delphi2009中引入的,Delphi2006中不存在。怎么解决?尝试[未测试]:

    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 (可能在 弦乐器 单位?).

        2
  •  0
  •   TridenT    14 年前

    1/你怎么称呼 VarToStr() 功能? VarToString(Arruid[0]) ?

    2/您的Delphi2006应用程序是否向dll发送ansistring或widestring? 如果是,并且(1)不起作用,则尝试强制转换为 AnsiString 而不是 string .