Добрый день!
AntonChik писал(а):Со скоростью разобрался, добавил тэг <Speed value=5/> , работает.
Действительно, в файл .SLTitleTsk сохраняются только задания, но восстанавливаются всё, что там есть.
Свойства сохраняются в проект (.SLTitleProj) и только не совпадающие с дефолтными. Изменённые значения свойств выделяются чёрным.
AntonChik писал(а):Теперь столкнулся с тем, что вопреки документации, не могу передать в GetTaskInfo/GetTaskInfoNew последний параметр &pDuration, компилятор ругается, что этот параметр лишний.
function does not take 3 arguments
function does not take 5 arguments
работает только вот так:
Код: Выделить всё
pIObject->GetTaskInfo(bstrTaskFile,&pLoop);
pIObject->GetTaskInfoNew(bstrTaskFile,&pLoop,&hres,&errorMsg);
Вы, очевидно, импортировали объекты с помощью директивы:
или что-то похожее.
Эта директива преобразует сигнатуры методов, учитывая атрибуты, заданные при описании методов.
Данные методы описаны так:
Код: Выделить всё
HRESULT GetTaskInfo ([in] BSTR fileName, [out] long * loop, [out,retval]double * pRetVal );
HRESULT GetTaskInfoNew(
[in] BSTR fileName,
[out] long* loop,
[out] HRESULT* hr,
[out] BSTR* errorMsg,
[out, retval] double* pRetVal);
Это приводит к тому, что сигнатуры методов выглядят так:
Код: Выделить всё
double GetTaskInfo (_bstr_t fileName, long * loop );
double GetTaskInfoNew (_bstr_t fileName, long * loop, HRESULT * hr, BSTR * errorMsg );
Т.е. нужные вам значения возвращаются в качестве результата.
Можно вызывать их примерно так:
Код: Выделить всё
try {
double duration = pIObject->GetTaskInfo(bstrTaskFile,&loop);
double duration1 = pIObject->GetTaskInfoNew(bstrTaskFile,&loop,&hres,&errorMsg);
}
catch (_com_error& err) {
// ошибка
}
Нужно помнить, что изменённые методы бросаются исключениями типа
в случае если исходный метод вернул код ошибки (HRESULT), с установленным старшим битом.
Кстати, директива #import, добавляет и методы с неизменённой сигнатурой, только в названиях приставляется приставка raw_.
Например:
Код: Выделить всё
HRESULT __stdcall raw_GetTaskInfoNew (BSTR fileName, long * loop, HRESULT * hr, BSTR * errorMsg, double * pRetVal )
всё это можно увидеть с сгенерённых компилятором файлах sltmtitleruntime.tlh и
sltmtitleruntime.tli
эти файлы появляются в подпапках Debug/Release
ну и на последок - компилятору можно запретить преобразовывать сигнатуры методов с помощью атрибута raw_interfaces_only
Например:
Код: Выделить всё
#import "SLTMTitleRunTime.tlb" raw_interfaces_only
тогда никаких оболочек для методов генерироваться не будет, все сигнатуры сохранятся, но ошибки надо будет проверять самостоятельно
Код: Выделить всё
double duration;
HRESULT hr = pIObject->GetTaskInfo(bstrTaskFile,&loop, &duration);
if (FAILED(hr)) {
// ошибка
}
Примерно так.
Извиняюсь за много буковок
Удачи!