这在 SDK 文档中有所描述,对您来说可能有点晚,但可能对其他人有帮助。
要创建事件处理程序,您需要在获得相机引用并打开会话后的某个时间执行以下操作:
Err = EdsSetObjectEventHandler( Camera, kEdsObjectEvent_All, HandleAllObjectEvents, NULL);
为了响应对象事件的 Canon SDK 回调(即在 HandleAllObjectEvents 函数中),您可以执行以下操作:
switch ( inEvent ) {
case kEdsObjectEvent_DirItemCreated:
// new file created on camera card
EdsDirectoryItemRef fileNameRef;
EdsDirectoryItemRef folderNameRef;
EdsDirectoryItemInfo fileNameInfo;
EdsDirectoryItemInfo folderNameInfo;
fileNameRef = (EdsDirectoryItemRef)inObject;
EdsGetDirectoryItemInfo( fileNameRef, &fileNameInfo ); // got the file name and some other info
EdsGetParent( fileNameRef, &folderNameRef );
EdsGetDirectoryItemInfo( folderNameRef, &folderNameInfo ); // got the folder name
char fname[100];
strcpy( fname, folderNameInfo.szFileName );
strcat( fname, "\\" );
strcat( fname, fileNameInfo.szFileName );
如您所知,如果您要拍摄大量照片,获取文件夹名称很重要,因为文件名从 IMG_9999.jpg 滚动到 IMG_0000.jpg,并且文件被放入一个新文件夹(例如从 100CANON 到 101CANON。只需使用文件名并不能保证唯一的名称。