Delphi 2010 变体到 unicode 问题

发布于 2024-08-25 07:13:42 字数 501 浏览 4 评论 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。有什么建议如何解决这个问题吗?

I am working on a DLL in Delphi 2010. It exports a procedure that receives an array of variants. I want to be able to take one of these variants, and convert it into a string, but I keep getting ?????

I cannot change the input variable - it HAS to be an array of variants.
The host app that calls the DLL cannot be changed. It is written in Delphi 2006.

Sample DLL code:

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

Using D2006 my DLL works fine. I have tried using VartoStr - no luck. When I check the VarType I am getting a varString. Any suggestions how to fix this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别念他 2024-09-01 07:13:42

您的主机应用程序正在发送 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中)代码>单位?)。

You host application is sending an AnsiString and you dll is expecting a UnicodeString.
Unicode strings was introduced in Delphi 2009, it does not exist in Delphi 2006. How to fix it? Try [untested]:

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

or maybe [also untested]:

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

You can also check if theres is a function Like VarToStr that accepts AnsiStrings (maybe in the AnsiStrings unit?).

不交电费瞎发啥光 2024-09-01 07:13:42

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

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

1/ How have you call the VarToStr() function ? VarToString(Arruid[0]) ?

2/ Does your Delphi2006 Application send AnsiString or WideString to the DLL ?
If so, and if (1) is not working, try to cast to AnsiString instead of string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文