Delphi 2010 变体到 unicode 问题
我正在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您的主机应用程序正在发送
AnsiString
,而您的 dll 需要UnicodeString
。Unicode 字符串是在 Delphi 2009 中引入的,在 Delphi 2006 中不存在。如何修复它?尝试[未经测试]:
或者也许[也未经测试]:
您还可以检查是否有像
VarToStr
这样接受AnsiStrings
的函数(可能在AnsiStrings
中)代码>单位?)。You host application is sending an
AnsiString
and you dll is expecting aUnicodeString
.Unicode strings was introduced in Delphi 2009, it does not exist in Delphi 2006. How to fix it? Try [untested]:
or maybe [also untested]:
You can also check if theres is a function Like
VarToStr
that acceptsAnsiStrings
(maybe in theAnsiStrings
unit?).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 ofstring
.