【问题标题】:What datatype in C++ that is equivalent to const CURRENCY in vb6?C++ 中的什么数据类型相当于 vb6 中的 const CURRENCY?
【发布时间】:2017-05-24 09:58:18
【问题描述】:

我正在编写一个 ATL C++ 程序,它用作 OCX 文件的包装类。这将被构建为 dll。

我的问题: 在 OCX 中有一个接受 CURRENCY 类型的方法。 前任: OCXMethodName(long a, const CURRENCY & cy);

在我的 C++ 代码中,当我尝试在 OCXMethodName 中传递 CURRENCY/CY 类型时,我在调试期间遇到错误。错误是,它没有返回 0,这意味着不成功。数据有问题。

参见示例: STDMETHODIMP CMethod::MyMethod(LONG var_a, CURRENCY amount) { ... long lRet = OCX->OCXMethodName(var_a, amount); //This will execute in OCX ... }

它将被构建为 dll,我使用 vbscript 对其进行进一步的单元测试。 前 vbscript 代码: Dim ret ret = objATL.MyMethod(11, 5000) '''This will call the C++ Method 执行后会弹出“Microsoft (R) Windows Based Script Host”对话框。

我的问题是处理或转换 CURRENCY 的最佳方法是什么,以便我可以在 OCX 方法中传递正确的数据类型?

【问题讨论】:

  • 错误是什么?
  • CY 来自哪里?该类型实际上是CURRENCY
  • 货币是一个 64 位有符号整数,包含按 10000 缩放的值,并用作具有 4 个小数位的“定点”值。因此,要将 1 乘以 7,您只需对其进行 64 位乘以 7,依此类推。 MIDL [oleautomation] 接口定义中的类型为CURRENCY
  • @Bob77:没错,但那是实现。正如CURRENCY const& b 所示,这个定点逻辑已经封装在一个 C++ 类中。
  • 你从哪里得到OCXMethodName(long a, const CURRENCY & cy);的定义?你怎么知道它是正确的?

标签: c++ vb6 ocx


【解决方案1】:

货币变量在内部存储为一个八字节长整数,假定小数点后四位。例如,1.25 的货币值将存储为 12500。希望这会为您指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-27
    • 2015-12-06
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多