我已經寫了一個簡單的控制檯程序來拍攝Canon EOS 600D上的照片。它工作正常,到目前爲止,但我想事件處理程序沒有回調佳能SDK 2.12
- 得到一個事件時,拍照
- ,如果它是一個新的形象造成我想獲得它作爲一個文件對象訪問 事件是屬性如文件名
我的事件處理程序得到初始化,但我沒有得到一個事件/回調時,照片拍攝。
我在其他線程中讀到,如果我正在使用Windows 64Bit,但現在幾乎所有的系統都是64位,它可能會成爲問題。這真的是一個問題嗎?
這裏是我到目前爲止的代碼:
#include "stdafx.h"
#include <EDSDK.h>
#include <EDSDKErrors.h>
#include <EDSDKTypes.h>
#include <string>
#include <iostream>
using namespace std;
EdsError getFirstCamera(EdsCameraRef *camera);
EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid * context);
string nmea = "$GPRMC,122030.232,A,4317.2345,N,14025.3423,W,12.2,245.1,230711,002.5,E*6F";
int _tmain(int argc, _TCHAR* argv[])
{
EdsError err=EDS_ERR_OK;
EdsCameraRef camera=NULL;
bool isSDKloaded=false;
// Initialize SDK
err=EdsInitializeSDK();
if(err==EDS_ERR_OK)
{
isSDKloaded=true;
}
// Get first camera
if(err==EDS_ERR_OK)
{
err=getFirstCamera(&camera);
}
// Open session with camera
if(err==EDS_ERR_OK)
{
err=EdsOpenSession(camera);
if(err==EDS_ERR_OK)
{
cout << "session started successfully" << endl;
}
else
{
cout << "session failed" << endl;
}
}
EdsInt32 saveTarget = kEdsSaveTo_Camera;
// Set camera properties
if(err==EDS_ERR_OK)
{
err = EdsSetPropertyData(camera, kEdsPropID_SaveTo, 0, 4, &saveTarget);
if(err==EDS_ERR_OK)
{
cout << "camera properties set!" << endl;
}
else
{
cout << "not able to set camera properties" << endl;
}
}
// Set object event handler
if(err==EDS_ERR_OK)
{
err = EdsSetObjectEventHandler(camera, kEdsObjectEvent_All,
handleObjectEvent,
NULL);
if(err==EDS_ERR_OK)
{
cout << "Event handler initialized!" << endl;
}
else
{
cout << "Not able to initialize event handler" << endl;
}
}
// Take picture
if(err==EDS_ERR_OK)
{
err = EdsSendCommand(camera, kEdsCameraCommand_TakePicture, 0);
if(err==EDS_ERR_OK)
{
cout << "Picture successfully taken!" << endl;
}
else
{
cout << "not able to set camera properties" << endl;
}
}
// End session and release SDK
EdsCloseSession(camera);
EdsTerminateSDK();
if(nmea != "")
{
cout << nmea <<endl;
}
else
{
cout << "das kann eigentlich nicht sein!" << endl;
}
system("Pause");
return 0;
}
EdsError getFirstCamera(EdsCameraRef *camera)
{
EdsError err=EDS_ERR_OK;
EdsCameraListRef cameraList=NULL;
EdsUInt32 count=0;
// Get camera list
err = EdsGetCameraList(&cameraList);
// Get number of cameras
if(err == EDS_ERR_OK)
{
err = EdsGetChildCount(cameraList, &count);
if(count == 0)
{
err = EDS_ERR_DEVICE_NOT_FOUND;
}
}
// Get first camera retrieved
if(err == EDS_ERR_OK)
{
err = EdsGetChildAtIndex(cameraList , 0 , camera);
}
// Release camera list
if(cameraList != NULL)
{
EdsRelease(cameraList);
cameraList = NULL;
}
return err;
}
EdsError EDSCALLBACK handleObjectEvent(EdsObjectEvent event, EdsBaseRef object, EdsVoid * context)
{
EdsDirectoryItemInfo objectInfo;
EdsError err=EDS_ERR_OK;
cout << "Event ausgelöst!" << endl;
switch(event)
{
case kEdsObjectEvent_DirItemCreated:
err = EdsGetDirectoryItemInfo(object, &objectInfo);
if(objectInfo.isFolder == 1)
{
cout << "Der Ordner " << objectInfo.szFileName << " wurde erzeugt" << endl;
}
if(objectInfo.isFolder == 0)
{
cout << "Die Datei " << objectInfo.szFileName << " wurde erzeugt" << endl;
}
break;
default:
cout << "Prüfe den EventHandler!" << endl;
break;
}
//Release object
if(object)
{
EdsRelease(object);
}
return err;
}
謝謝你一些幫助!
最好的問候, 理查德
好的,謝謝你, 所以我加了一個: 味精味精; 一段時間(的GetMessage(味精,NULL,NULL,NULL)) { 的TranslateMessage(&msg); 在DispatchMessage(&msg); } 到我的主線程,但無論我做什麼,它堅持的循環。我的程序將不會繼續進行。這個消息如何與我的Eds回調函數一起工作?你能舉個簡單的例子嗎?我找不到任何有用的東西。我想讓我的EDSCALLBACK handleObjectEvent函數在我拍照的時候執行。 – RichardR