【发布时间】:2014-12-18 01:46:17
【问题描述】:
使用 Windows 7 64 和 Delphi 2010
我们正在调用第 3 方函数:EFTTerminal.Purchase(1,0),它从 EFTPOS 终端购买 1 美元。
每当调用它时,我们总是会得到“无效的变体操作”。
EFTTerminal.Purchase(1,0)。我认为参数是 Variant 类型,因为以下都可以编译。
EFTTerminal.Purchase(1,0)
EFTTerminal.Purchase('1','0')
EFTTerminal.Purchase(1.5,1.5)
但都给出相同的错误。
当我打破它时,它是在变体单元中的这个过程中。
procedure VarInvalidOp;
begin
raise EVariantInvalidOpError.Create(SInvalidVarOp);
end;
第 3 方不能/不会向我们提供源代码,因此我们无法进一步追踪。
谁能给我一些关于如何解决这个问题的线索?
【问题讨论】:
-
仅仅因为接受多个输入值类型并不一定意味着正在使用
Variant。Purchase()可以简单地为多种数据类型重载。您必须知道定义才能调用它,那么Purchase()是如何实际声明的?您无需完整的源代码即可获取该信息。 -
EFTTerminal实际声明为什么?它是一个类、一个 DLL、一个 COM 对象,...? -
调用
VarInvalidOp()时,调试器中的完整调用堆栈是什么样的? -
谢谢 Remy 我已请求第 3 方声明此功能。
-
第 3 方是否已采取任何措施帮助您解决此问题?这是他们的图书馆。如果他们不能帮助您,我建议您找到另一个 EFTPOS 库,甚至直接编写您自己的 ETFPOS 通信代码(终端供应商提供 EFTPOS 规范 - 例如,我有一个来自 PC-EFTPOS Pty Ltd 的此类规范)。
标签: delphi delphi-2010