Я сейчас пытаюсь использовать Canon SDK на C++. Это действительно первый раз, когда я использую SDK, и я начинаю писать на C++.
Проблема в том, что когда я пытаюсь инициализировать SDK с помощью функции EdsInitializeSDK(), он сразу вылетает, вот сообщения об ошибках:
Exception thrown at 0x00007FFA34E0121C (EDSDK.dll) in CameraTest.exe: 0xC0000005: Access violation reading location 0x00000000B44D4740.
Unhandled exception at 0x00007FFA34E0121C (EDSDK.dll) in CameraTest.exe: 0xC0000005: Access violation reading location 0x00000000B44D4740.
Вот весь код здесь:
#include "stdafx.h"
#include "iostream"
#include "EDSDK.h"
#include "EDSDKTypes.h"
#include "CameraModel.h"
#include "CameraModelLegacy.h"
#include "CameraController.h"
#include "CameraEventListener.h"
using namespace std;
int main(void)
{
EdsError err = EDS_ERR_OK;
EdsCameraListRef cameraList = NULL;
EdsUInt32 count = 0;
EdsCameraRef camera = nullptr;
bool isSDKLoaded = false;
err = EdsInitializeSDK();
system("pause");
if (err == EDS_ERR_OK) {
cout << "SDK INITIALISED" << endl;
} else {
cout << "SDK INITIALISATION FAILED WAIT FOR EXIT" << endl;
system("pause");
exit(84);
}
cout << err << endl;
err = EdsGetCameraList(&cameraList);
cout << err << endl;
if (err == EDS_ERR_OK) {
cout << "Camera List Ok" << endl;
err = EdsGetChildCount(cameraList, &count);
cout << "Count : " << count << endl;
if (count == 0) {
err = EDS_ERR_DEVICE_NOT_FOUND;
}
}
else {
cout << "No Camera List" << endl;
}
if (err == EDS_ERR_OK) {
cout << "It worked" << endl;
err = EdsGetChildAtIndex(cameraList, 0, &camera);
} else {
cout << "It didnt worked" << endl;
}
system("pause");
}
Если я удалю функцию EDSInitializeSDK, она не выйдет из строя. Вы знаете, в чем проблема? Спасибо.
@ZDF Спасибо за ответ. Я уже пытался это сделать, все равно вылетает.
Есть ли что-то, что вы должны установить перед вызовом функции инициализации? Драйверы? Другие DLL установлены?





Итак, ответ довольно прост. Когда я подключаю камеру, появляется программа под названием «EOS Utility 3». Проблема в том, что когда я закрываю его (и убеждаюсь, что он действительно близок, а не просто сокращен), он работает. Спасибо за вашу помощь. (Я использовал Canon EDSDK версии 3.6.1 с Canon EOS 1300D)
Попробуйте что-нибудь попроще: просто вызовите функцию инициализации и функцию выпуска. И проверьте документацию для этих двух функций.