Если вызываю SomeTotal из кода написанного на C++ — все ок, возвращается корректное значение.
Если же вызывать SomeTotal из кода написанного на Delphi, то значение возвращается почему-то помноженное на 2.
Здравствуйте, apmyp, Вы писали:
A>Столкнулся со следующей странной ситуацией. ... A>Если вызываю SomeTotal из кода написанного на C++ — все ок, возвращается корректное значение. A>Если же вызывать SomeTotal из кода написанного на Delphi, то значение возвращается почему-то помноженное на 2.
A>Что это? И как с этим быть?
Нужен код вызова и код обработки. По виду метода ничего сказать нельзя.
Здравствуйте, apmyp, Вы писали:
A>Если вызываю SomeTotal из кода написанного на C++ — все ок, возвращается корректное значение. A>Если же вызывать SomeTotal из кода написанного на Delphi, то значение возвращается почему-то помноженное на 2.
А при импотирте интерфейса про calling convention не забыли?
Здравствуйте, apmyp, Вы писали:
A>Всем привет,
A>Столкнулся со следующей странной ситуацией. На C++ написан COM-интерфейс вида:
A>
A>interface ISomeFace : IDispatch
A> {
A> [id(1), helpstring("Some count")] HRESULT SomeTotal([out] int* pos);
A> };
A>
A>Если вызываю SomeTotal из кода написанного на C++ — все ок, возвращается корректное значение. A>Если же вызывать SomeTotal из кода написанного на Delphi, то значение возвращается почему-то помноженное на 2.
A>Что это? И как с этим быть? Помогите пожалуйста!
Vi2>Нужен код вызова и код обработки. По виду метода ничего сказать нельзя.
Код вызова:
ISomeFace = interface(IDispatch)
['{12345587-5B01-4095-9411-9AA28A052C9B}']
procedure SomeTotal(out total: SYSINT); safecall;
// function SomeTotal: SYSINT; safecall; // если retval сделать, но ошибка останется
procedure SomeGet(pos: SYSINT; out symbol: WideString); safecall;
end;
//---
Здесь вызов:
MW. SymbolsTotal(K);
Причем SomeGet нормально строку отдает, а вот SomeTotal <<1 или *2.
Код обработки:
STDMETHODIMP CSome::SomeTotal(int* total)
{
if(!pos) return(E_HANDLE);
//--- сохраним
*pos=m_symbols.size(); // на самом деле там не STL, но не суть, в дебаггере вижу корректное значение
//---return(S_OK);
}
RB>Количество символов и размер в байтах не перепутал?
Там две разные функции. Я всего лишь сказал, что одна функция корректно возвращает, а другая нет. Понятное дело, что они работают с разными параметрами. Подразумевалось, что косяк должен быть системный, если он есть.
Передавать число параметром в виде строки — нонсенс.