我使用Nicomsoft OCR库在Delphi中对OCR图像进行处理。它对我的任务有好处,并且它有Delphi单元包装器,因此在Delphi中使用它很容易。但是,当我将空字符串作为参数值传递给某些OCR函数时,Delphi调试器会显示“范围错误”消息。我检查了包装器代码,发现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
//.....
我做了一些研究,发现很多常见问题都提供了这样的转换,例如:http://www.delphibasics.co.uk/RTL.asp?Name=PWideChar
如果“a”不是空字符串,它可以工作,但对于空字符串,它会导致“范围”错误。即使它是空字符串,如何正确获取指向WideString变量的第一个字符的指针?据我所知,即使string为空,它必须包含零字符,PWideChar变量必须指向它。
答案 0 :(得分:2)
按照documentation中的说明使用PWideChar()
强制转换。在你的情况下,它将是:
CallSomeDLLFunction(PWideChar(a));