【发布时间】: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);的定义?你怎么知道它是正确的?