【问题标题】:Invalid Variant Operation无效的变体操作
【发布时间】: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 方不能/不会向我们提供源代码,因此我们无法进一步追踪。

谁能给我一些关于如何解决这个问题的线索?

【问题讨论】:

  • 仅仅因为接受多个输入值类型并不一定意味着正在使用VariantPurchase() 可以简单地为多种数据类型重载。您必须知道定义才能调用它,那么Purchase() 是如何实际声明的?您无需完整的源代码即可获取该信息。
  • EFTTerminal 实际声明为什么?它是一个类、一个 DLL、一个 COM 对象,...?
  • 调用VarInvalidOp() 时,调试器中的完整调用堆栈是什么样的?
  • 谢谢 Remy 我已请求第 3 方声明此功能。
  • 第 3 方是否已采取任何措施帮助您解决此问题?这是他们的图书馆。如果他们不能帮助您,我建议您找到另一个 EFTPOS 库,甚至直接编写您自己的 ETFPOS 通信代码(终端供应商提供 EFTPOS 规范 - 例如,我有一个来自 PC-EFTPOS Pty Ltd 的此类规范)。

标签: delphi delphi-2010


【解决方案1】:

全部修复。 这是我的代码中对象的初始化问题。 感谢您的建议雷米

【讨论】:

  • 这并不是一个真正对未来的访客有用的答案或问题。你应该删除。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
  • 2012-08-08
相关资源
最近更新 更多