如何正确实现EDSDK的EdsSetProgressCallback功能?

时间:2012-03-22 15:02:50

标签: sdk progress edsdk

我正在尝试使用Canon EDSDK 2.10中的EdsSetProgressCallback功能来通知用户图像保存完成情况。我已将inProgressOption参数设置为kEdsProgressOption_Done。问题是,成功保存后不执行任何操作。你能告诉我我是否正确实现了这个功能吗?

我的回调函数:

EdsError EDSCALLBACK CManEosDlg::ProgressFunc (EdsUInt32 inPercent, EdsVoid* inContext, EdsBool* outCancel) {
    CManEosDlg *pobj = (CManEosDlg *)inContext;
    CStatic *pProgress=(CStatic*)pobj->GetDlgItem(IDC_LABEL);
    pProgress->SetWindowText("Image saved");
    return EDS_ERR_OK;
}

片段图像保存功能:

EdsStreamRef        DstStreamRef;
EdsError err = EdsCreateFileStream( path , kEdsFileCreateDisposition_CreateAlways , kEdsAccess_Write , &DstStreamRef );
if( err == EDS_ERR_OK ) {
    err = EdsSetProgressCallback(DstStreamRef, ProgressFunc, kEdsProgressOption_Done, this);
    if(err == EDS_ERR_OK) {
        err = EdsSaveImage(_imageModel->getImageObject(), inImageType , inSaveSetting , DstStreamRef ); 
    }
}
EdsRelease(DstStreamRef);

Latter从EdsSetProgressCallback返回EDS_ERR_OK,但在保存图像后永远不会调用ProgressFunc。我把消息箱放在那里检查了它;)

1 个答案:

答案 0 :(得分:1)

您的代码似乎很棒!

而不是EdsSaveImage尝试EdsDownload。 我认为EdsSaveImage不会发送回调函数的调用。

BTW我想知道你在你的命名空间中使用了“Callbacker”:

EdsError EDSCALLBACK CManEosDlg::ProgressFunc

在我的项目中,我必须在我的“CManEosDlg”类的顶部定义没有名称空间的内容,如

EdsError EDSCALLBACK ProgressFunc