我使用Nicomsoft OCR库对Delphi中的OCR图像进行处理。它对我的任务很好,它有Delphi单元包装器,所以在Delphi中使用它很容易。但是,当我将空字符串作为参数值传递给一些OCR函数时,Delphi调试器会显示“范围错误”消息。我检查了包装程序代码,发现DLL库函数接受PWideChars作为参数,而包装器则接受WideString。在单元包装器内部有以下转换:
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“不是空字符串,但对于空字符串则会导致"Range”错误,则该方法有效。即使WideString变量是空字符串,如何正确地获得指向第一个字符的指针?据我所知,即使字符串是空的,它也必须包含零字符,PWideChar变量必须指向它。
发布于 2015-04-09 09:06:46
使用PWideChar()强制转换,如文档中所述。就你的情况而言,应该是:
CallSomeDLLFunction(PWideChar(a));https://stackoverflow.com/questions/29534067
复制相似问题