将 WideString 转换为 PWideChar



我使用Nicomsoft OCR库在Delphi中OCR图像。它对我的任务有好处,它有德尔福单元包装器,所以在德尔福中很容易使用它。但是,当我将空字符串作为参数值传递给某些 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"不是空字符串

,它就可以工作,但对于空字符串,它会导致"范围"错误。如何正确获取指向 WideString 变量第一个字符的指针,即使它是空字符串?据我了解,即使字符串为空,它也必须包含零字符,PWideChar 变量必须指向它。

按照

文档中的说明使用PWideChar()强制转换。在您的情况下,它将是:

CallSomeDLLFunction(PWideChar(a));

最新更新