Интерфейсы должны быть доступны только по указателям / ссылкам. В этом случае вам нужна переменная-указатель, и вы должны передать адрес этой переменной в SHCreateShellItemArrayFromDataObject()
(используя приведение типа), чтобы он мог установить этот указатель на адрес объекта, реализующего IShellItemArray
, для которого Shell создает вы. Например:
HRESULT MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtObj, HKEY hkeyProgId)
{
...
IShellItemArray *items; // <-- pointer
HRESULT hr = SHCreateShellItemArrayFromDataObject(pdtObj, IID_IShellItemArray, (void**)&items); // <-- type cast
...
}
У доктора Dobb есть статья о возможной реализации типа вычислений с фиксированной точкой в C++. Проверьте это .
Я использую свой математический класс фиксированной точки. Это разработано, чтобы быть более или менее понижением замены для, плавает/удваивает. http://codef00.com/coding
РЕДАКТИРОВАНИЕ : Как примечание стороны, я не был бы, лично использовал класс фиксированной точки с этой целью. Я вместо этого просто сохранил бы количество центов (или десятых частей цента или сотых частей цента по мере необходимости). Справедливое делает математику непосредственно с этим. Затем я масштабировал бы значение соответственно при отображении пользователям.
Ай. Финансовые системы хитры, Вашей основной проблемой не является математика фиксированной точки, проблема погрешности округления.
у Вас может быть хорошая электронная таблица, полная maverlous вычислений со скидками клиентским типом и включенным VAT. Вы делаете общее количество, Вы представляете его бухгалтеру, и он говорит, что значения неправильны. Причина: вывод может быть форматирован только с 2 десятичными разрядами, но внутренне значение имеет все десятичные разряды плавания или дважды. и они действительно складывают.
необходимо знать финансовые документы и решить, где основные значения будут. Значение, какие значения - те бухгалтеры, проверит (да, оно требует знаний о бизнесе, следовательно 'хитрая' часть).
перед сохранением значения к персистентной форме (база данных, файл, память...) Вы усекаете дополнительные десятичные разряды, которые, возможно, добавили умножение и подразделения.
Быстрое и грязное решение для десятичных разрядов N: ((дважды) ((интервал) (Значение * N * 10.0)))/10.0
, Конечно, необходимо проверить точно, какой вид округления делают финансовые документы требуют.