Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 使用CCR读取Exif数据。Exif导致访问冲突_Delphi_Jpeg_Exif - Fatal编程技术网

Delphi 使用CCR读取Exif数据。Exif导致访问冲突

Delphi 使用CCR读取Exif数据。Exif导致访问冲突,delphi,jpeg,exif,Delphi,Jpeg,Exif,我有一个名为ViewPhotos的程序,在读取Exif数据时会出现问题。我正在使用CCR.Exif(由Chris Rollistone编写)。Exif不位于项目目录中。 为了弄清楚发生了什么,我创建了一个名为TestExif的小程序,它由一个表单和一个按钮组成,调用下面所示的过程。我还复制了完全相同的过程来查看照片。TestExif使用与ViewPhotos相同的单位CCR.Exif procedure TForm1.Button1Click(Sender: TObject); var Ex

我有一个名为ViewPhotos的程序,在读取Exif数据时会出现问题。我正在使用CCR.Exif(由Chris Rollistone编写)。Exif不位于项目目录中。 为了弄清楚发生了什么,我创建了一个名为TestExif的小程序,它由一个表单和一个按钮组成,调用下面所示的过程。我还复制了完全相同的过程来查看照片。TestExif使用与ViewPhotos相同的单位CCR.Exif

procedure TForm1.Button1Click(Sender: TObject);
var
  ExifData: TExifData;
  ADate: TDateTime;
  OriginalDate: TDateTime;
  Mes: string;
begin
  ExifData := TExifData.Create;
  try
    ExifData.LoadFromGraphic('C:\000\APhotos\ADigital\2017\BlueMountains\PC090131.JPG');
    ADate := ExifData.DateTime;
    Mes := 'Date' + ' = ' + DateToStr(ADate) + #13;
    OriginalDate :=  ExifData.DateTimeOriginal;
    Mes := Mes + 'OriginalDate' + ' = ' + DateToStr(OriginalDate);
  finally
    ExifData.Free;
  end;
  ShowMessage(Mes);
end;
现在,我做以下工作:

  • 构建ViewPhotos
  • 在ViewPhotos中运行测试过程。这 生成访问冲突
  • 关闭查看照片并打开测试XIF
  • 运行TestExif。这会产生访问冲突
  • 构建测试
  • 运行TestExif并获得预期结果
  • 关闭TestExif并打开ViewPhotos
  • 运行ViewPhotos并获得正确的结果
  • 如何找到问题的原因并加以纠正?我应该采取什么步骤

    访问冲突包括:


    要正确编译CCR.Exif,用于完整布尔运算的语法选项必须保留false(这是默认设置)。

    使用调试器定位AV发生在哪一行。如果你不知道怎么做,从这里开始:,或者从这里开始:AV的文本会很有趣。确切的地址有时(但通常不是)可能是错误的暗示。另外,看看堆栈跟踪。这通常表明哪一行是罪魁祸首。@Rudi:我也是(业余爱好者)。易于阅读的堆栈跟踪:顶部是最后一个调用的堆栈跟踪,下面是调用堆栈跟踪的代码,下面是调用堆栈跟踪的代码,等等。FWIW,如果打开这样的错误消息,只需按Ctrl+C,对话框的文本(包括OK按钮)将复制到剪贴板。只需将该文本粘贴到您的邮件中。不需要截图和张贴图片。@Rudi:好的,这很有意义。但请注意,默认情况下这是错误的,AFAICT几乎没有任何人(包括我)检查过情况是否如此。ISTM认为,在极少数需要的情况下,完全的布尔运算可以在代码中显式完成,因此该选项可以从语言中完全删除(在我看来)。