将WideString转换为PWideChar

时间:2015-04-09 08:58:35

标签: delphi type-conversion ocr widestring

我使用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变量必须指向它。

1 个答案:

答案 0 :(得分:2)

按照documentation中的说明使用PWideChar()强制转换。在你的情况下,它将是:

CallSomeDLLFunction(PWideChar(a));