2015-04-09 7 views
1

Я использую библиотеку 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 должна указывать на нее.

+1

Передайте его как 'CallSomeDLLFunction (PWideChar (a));'. – TLama

ответ

2

Использовать PWideChar() литье, как описано в documentation. В вашем случае это будет:

CallSomeDLLFunction(PWideChar(a)); 

 Смежные вопросы

  • Нет связанных вопросов^_^