Delphiで画像をOCRするためにNicomsoft OCRライブラリを使用しています。それは私のタスクに適しており、Delphi ユニット ラッパーを備えているため、Delphi で簡単に使用できます。ただし、一部の OCR 関数に空の文字列をパラメータ値として渡すと、Delphi デバッガに「Range Error」メッセージが表示されます。ラッパー コードを確認したところ、DLL ライブラリ関数はパラメーターとして PWideChars を受け入れますが、ラッパーは WideString を受け入れます。unit-wrapper の内部には、次の変換があります。
function CallSomeOCRFunction(a: WideString);
var b: PWideChar;
begin
b := @a[1];
CallSomeDLLFunction(b); //passing "b" to DLL function that accepts PWideChar
//.....
私はいくつかの調査を行い、多くの FAQ がそのような変換を提供していることを発見しました。
「a」が空の文字列でない場合は機能しますが、空の文字列の場合は「Range」エラーが発生します。空の文字列であっても、WideString 変数の最初の文字へのポインターを正しく取得するにはどうすればよいですか? 私が理解している限り、文字列が空の場合でも、ゼロ文字が含まれている必要があり、PWideChar 変数はそれを指している必要があります。