2

我正在尝试编写一个基于控制台的应用程序来访问 Mac OS X 10.7.5 上的佳能相机。我正在使用 XCode 4.6 版。这是我正在尝试编写的程序

#import <Foundation/Foundation.h>
#include "EDSDK.h"
#include "EDSDKErrors.h"
#include "EDSDKTypes.h"


int main()
{
    @autoreleasepool {
        EdsError error = EDS_ERR_OK;
        EdsCameraListRef cameraList = NULL;
        EdsUInt32 count = 0;
        EdsDeviceInfo deviceInfo;
        bool isSDKLoaded;

        // Initialization of SDK
        error = EdsInitializeSDK();

        //Acquisition of camera list
        if(error == EDS_ERR_OK)
        {
            isSDKLoaded = YES;
            error = EdsGetCameraList(&cameraList);
        }
        if(cameraList != NULL) {
            EdsRelease(cameraList);
            cameraList = NULL;
        }

    }
    return 0;
}

它编译成功,但是当我运行程序时,它会在 EdsGetCameraList 函数返回时崩溃。显示的错误是“dyld misaligned_stack_error”。我知道这与 MacOS X 希望堆栈是 16 字节对齐的事实有关。我使用的 SDK 仅适用于 32 位架构,因此,我已经相应地设置了架构。我尝试在 XCode 的 Build Settings 下设置“Other C flags”以包含标志“-falign-stack=assume-16-byte”。

佳能 EDSDK 附带的示例工作正常。使用的 SDK 版本是佳能在 2006-2007 年开发的版本,更新于 06-03-16。我没有其他版本信息。

以下是日志中的转储: //pastebin.com/vfDWeZnr

我可能做错了什么?

我对 Objective-C 非常陌生,因此,C 和 Objective-C 代码的混合。

谢谢!

4

1 回答 1

0

你确定你不需要初始化cameraList吗?我想该函数想要写入您提供的地址,但指向NULL,因此出现错误。在 C 中,我会malloc()在这里使用来获取指针,但我不知道 Objective-C 的等价物。

于 2013-04-10T07:06:42.773 回答