【发布时间】:2011-10-28 07:01:53
【问题描述】:
我正在编辑一个名为 Opencv for Delphi 的开源项目,它可以与 Delphi 6 、Delphi 2009 和 Delphi xe2 一起正常编译。
我刚刚删除了 Delphi 6 编译的不兼容(例如:Application.MainFormOnTaskbar := True;)。
在运行时 d6 应用程序运行良好,没有错误,但其余的编译良好,但在调用 cvopencv.dll 时出现运行时错误。
原始项目是使用 Delphi 2007 编译的西班牙项目,运行良好。
在 d6 exe 中,除了 ???????但其他人以西班牙语显示,这意味着这是一个 UNICODE 问题,当调用cvopencv.dll时会发生错误。
如何使这个项目与 Delphi 2009 或更高版本一起工作(仍然 d2009 编译良好)
==========================大卫·赫夫曼回答后================== ===
procedure TForm1.Button2Click(Sender: TObject);
var
file1 : PAnsiChar; // "haarcascade_frontalface_alt.xml";
file2 : PAnsiChar; //"haarcascade_eye.xml";
file3 : PAnsiChar; //"haarcascade_upperbody.xml";
SourceFileName : AnsiString;
StorageType : Integer;
ImSize : CvSize;
begin
memo1.Lines.Clear;
GetMem(Storage, SizeOf(CvMemStorage));
SourceFileName:=Edit1.Text;
StorageType:=0;
storage:=nil;
storage :=cvCreateMemStorage(storageType);
file1 := PAnsiChar(ExtractFilePath(Application.ExeName)+'haarcascade_frontalface_alt.xml');
file2 := PAnsiChar(ExtractFilePath(Application.ExeName)+'haarcascade_eye.xml');
file3 := PAnsiChar(ExtractFilePath(Application.ExeName)+'haarcascade_upperbody.xml');
cascade_f := cvLoad(file1, nil, nil, nil);
cascade_e := cvLoad(file2, nil, nil, nil);
cascade_ub := cvLoad(file3, nil, nil, nil);
if cascade_f=nil then ShowMessage('Íå ìîãó çàãðóçèòü êàñêàä Face');
if cascade_e=nil then ShowMessage('Íå ìîãó çàãðóçèòü êàñêàä Eye');
if cascade_ub=nil then ShowMessage('Íå ìîãó çàãðóçèòü êàñêàä UpperBody');
img := cvLoadImage(PAnsiChar(AnsiString(SourceFileName)), 1);
cvNamedWindow((PAnsiChar(AnsiString(Edit1.Text))), 1);
detectEyes(img);
cvShowImage(PAnsiChar(AnsiString(SourceFileName)), img);
end;
end.
【问题讨论】: