Başvurduğunuz OpenCV kitaplığı, üstbilginin üst kısmında şöyle diyor:
Intel Açık Kaynak Bilgisayarı Vizyon Kütüphanesi için Borland Delphi 4,5,6,7 API
Bu kod, OpenCV DLL'lerinin etrafında bir Delphi sarıcısı sunar.
Bu eski Delphi sürümleri için Char
, PChar
ve string
haritasının AnsiChar
, PAnsiChar
ve sırasıyla AnsiString
. Bu, saf ANSI olan OpenCV DLL'leriyle eşleşir. OpenCV'de Unicode API'leri yoktur (en azından ayırt edebildiğim kadarıyla).
Bu birimi Delphi 2009'dan kullanmak isterseniz, bunu Delphi 2009'da tanımanız gerekiyor, Unicode desteği eklendi. Bu, Char
, PChar
ve string
haritasının WideChar
, PWideChar
olarak değiştirilmesini değiştirdi ve sırasıyla UnicodeString
. Bu birimin arkasındaki DLL hala tek baytlı ANSI metni işlediği için karşılaştığınız uyumsuzluğun nedeni budur.
Muhtemelen bu ünitede en hassas yaklaşım, AnsiChar
, PAnsiChar
ve AnsiString
'i kullanmaktır. Bunu global bir arama ile yapabilir ve ünitede değiştirebilirsiniz.
Bu OpenCV.pas ünitesini tekrar DLL'lerle eşleştirecektir. Bu OpenCV.pas ünitesiyle nasıl bir arayüz oluşturduğunuz konusunda dikkatli olmanız gerekiyor. PAnsiChar
parametrelerini alan işlevlerin özel bir işleme ihtiyacı vardır.
Örneğin aşağıdaki örneği göz önünde bulundurun:
Function cvLoadImage( const filename : PChar;
iscolor : integer=1) : PIplImage; cdecl;
Bu orijinal beyannamedir. Aramanızdan ve değiştirdikten sonra şu şekilde okunur:
Function cvLoadImage( const filename : PAnsiChar;
iscolor : integer=1) : PIplImage; cdecl;
Aramaya geldiğinizde, uygun bir PAnsiChar
ilettiğinizden emin olmanız gerekir. Bunun gibi:
var
FileName: string;
...
image := cvLoadImage(PAnsiChar(AnsiString(FileName)));
string
dosyasından ( UnicodeString
ile eşlenen) AnsiString
'e dönüştürmeniz ve sadece PAnsiChar
' a yayınlayabilmeniz gerekir. yazmayın PAnsiChar (DosyaAdı)
yazın. Bu, Unicode dizesini ANSI'ye dönüştürmez ve başarısız olur.
Neyse ki sizin için OpenCV kütüphanesi, metin alan nispeten az sayıda API'ye sahiptir.