Какой тип данных в C ++ эквивалентен const CURRENCY в vb6?

Я пишу программу ATL C ++, которая служит классом-оболочкой для файла OCX. Он будет построен как dll.

Моя проблема: В OCX есть метод, принимающий тип ВАЛЮТА. Пример: OCXMethodName(long a, const CURRENCY & cy);

В моем коде C ++, когда я пытаюсь передать тип CURRENCY / CY в OCXMethodName, я получаю сообщение об ошибке во время отладки. Ошибка в том, что он не возвращает 0, что означает неуспех. Что-то не так с данными.

См. Пример: STDMETHODIMP CMethod::MyMethod(LONG var_a, CURRENCY amount) { ... long lRet = OCX->OCXMethodName(var_a, amount); //This will execute in OCX ... }

Он будет построен как dll, и я использовал vbscript для дальнейшего модульного тестирования. Ex vbscript-код: Dim ret ret = objATL.MyMethod(11, 5000) '''This will call the C++ Method После выполнения появляется диалоговое окно "Microsoft (R) Windows Based Script Host".

Мой вопрос: как лучше всего обрабатывать или преобразовывать ВАЛЮТУ, чтобы я мог передать правильный тип данных в методе OCX?


person Joshua    schedule 24.05.2017    source источник
comment
Что за ошибка?   -  person themiurge    schedule 24.05.2017
comment
Откуда CY? Тип буквально CURRENCY.   -  person MSalters    schedule 24.05.2017
comment
Валюта - это 64-битное целое число со знаком, содержащее значения, масштабированные на 10000 и используемые как значение с фиксированной запятой с 4 десятичными знаками. Итак, чтобы умножить единицу на 7, вы просто выполняете 64-битное умножение на 7 и так далее. Тип CURRENCY в определениях интерфейса MIDL [oleautomation].   -  person Bob77    schedule 24.05.2017
comment
@ Bob77: Верно, но это реализация. Как показывает CURRENCY const& b, эта логика с фиксированной точкой уже заключена в класс C ++.   -  person MSalters    schedule 24.05.2017
comment
Откуда вы взяли определение OCXMethodName(long a, const CURRENCY & cy);? Как узнать, что это правильно?   -  person Ben    schedule 25.05.2017


Ответы (1)


Переменная валюты хранится внутри как восьмибайтовое целое число с четырьмя предполагаемыми десятичными знаками. Например, значение валюты 1,25 будет сохранено как 12500. Надеюсь, это укажет вам правильное направление.

person Bill Hileman    schedule 24.05.2017