E2010 Несовместимые типы, почему?

Я получаю эту ошибку:

[DCC Error] JwaStrSafe.pas(2277): E2010 Incompatible types: 'PSTRSAFE_LPWSTR' and 'PSTRSAFE_LPTSTR'

Ниже приведен соответствующий фрагмент кода из JwaStrSafe.pas (из Jedi Api), я компилирую с определенным символом UNICODE:

type

STRSAFE_LPWSTR = PWIDECHAR;
PSTRSAFE_LPWSTR = ^STRSAFE_LPWSTR;

{$IFDEF UNICODE}
  STRSAFE_LPTSTR = STRSAFE_LPWSTR;
  PSTRSAFE_LPTSTR = ^STRSAFE_LPTSTR;
{$ELSE}
  ...
{$ENDIF}

...
//function declaration
function StringCchCopyExW(
  {__out_ecount(cchDest)}pszDest : STRSAFE_LPWSTR;
  {__in}cchDest : size_t;
  {__in}const pszSrc : STRSAFE_LPCWSTR;
  {__deref_opt_out_ecount(pcchRemaining^)}ppszDestEnd : PSTRSAFE_LPWSTR;
  {__out_opt}pcchRemaining : PSize_t;
  {__in}dwFlags : Cardinal) : HRESULT; stdcall; forward; external;

...
//var passed to function
ppszDestEnd : PSTRSAFE_LPTSTR;

...

{$IFDEF UNICODE}
  result := StringCchCopyExW(pszDest, cchDest, pszSrc, ppszDestEnd, pcchRemaining, dwFlags);
{$ELSE}
  result := StringCchCopyExA(pszDest, cchDest, pszSrc, ppszDestEnd, pcchRemaining, dwFlags);
{$ENDIF}

Я получаю ошибку на вызове StringCchCopyExW, на параметре ppszDestEnd.

Глядя на определение типа, я понимаю, что PSTRSAFE_LPTSTR является указателем на STRSAFE_LPTSTR, который является просто псевдонимом STRSAFE_LPWSTR, почему PSTRSAFE_LPTSTR и PSTRSAFE_LPWSTR несовместимы?

Решение
Благодаря объяснению Дэвида я заменил

PSTRSAFE_LPTSTR = ^STRSAFE_LPTSTR;

на

PSTRSAFE_LPTSTR = PSTRSAFE_LPWSTR;

теперь код компилируется без ошибок.

Thanks

8
задан Paolo Biondi 2 December 2011 в 21:09
поделиться