Delphi 将WideString转换为PWideChar

Delphi 将WideString转换为PWideChar,delphi,type-conversion,ocr,widestring,Delphi,Type Conversion,Ocr,Widestring,我使用Nicomsoft OCR库在Delphi中对图像进行OCR。这对我的任务很好,它有Delphi单元包装器,所以在Delphi中使用它很容易。然而,当我将空字符串作为参数值传递给某些OCR函数时,Delphi调试器显示“范围错误”消息。我检查了包装器代码,发现DLL库函数接受PWideChars作为参数,但包装器接受WideString。单元包装器内部有以下转换: function CallSomeOCRFunction(a: WideString); var b: PWideChar;

我使用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
  //.....
我做了一些研究,发现许多常见问题解答提供了这种转换,例如:

如果“a”不是空字符串,则它可以工作,但对于空字符串,它会导致“Range”错误。即使WideString变量的第一个字符是空字符串,如何正确地获取它的指针?据我所知,即使字符串为空,它也必须包含零个字符,PWideChar变量必须指向它。

使用
PWideChar()
强制转换,如中所述。在您的情况下,它将是:

CallSomeDLLFunction(PWideChar(a));

将其作为
CallSomeDLLFunction(PWideChar(a))传递