Я использую библиотеку OCR Nicomsoft для образов OCR в Delphi. Это хорошо для моих задач, и у него есть обертка Delphi, поэтому его легко использовать в Delphi. Тем не менее, отладчик Delphi показывает сообщение «Range Error», когда я передаю пустую строку в качестве значения параметра некоторым функциям OCR. Я проверил код оболочки и обнаружил, что функции библиотеки DLL принимают параметр PWideChars как параметр, но оболочка принимает WideString. Внутри блока-обертки есть следующее преобразование:Преобразование WideString в PWideChar
function CallSomeOCRFunction(a: WideString);
var b: PWideChar;
begin
b := @a[1];
CallSomeDLLFunction(b); //passing "b" to DLL function that accepts PWideChar
//.....
Я сделал некоторые исследования и обнаружили, что многие часто задаваемые вопросы предлагают такое преобразование, например: http://www.delphibasics.co.uk/RTL.asp?Name=PWideChar
Это работает, если «а» не пустая строка, но для пустой строки это вызывает ошибку «Range». Как я могу получить указатель на первый символ переменной WideString правильно, даже если это пустая строка? Насколько я понимаю, даже если строка пуста, она должна содержать нулевой символ, а переменная PWideChar должна указывать на нее.
Передайте его как 'CallSomeDLLFunction (PWideChar (a));'. – TLama