我得到這個錯誤:E2010不兼容的類型,爲什麼?
[DCC Error] JwaStrSafe.pas(2277): E2010 Incompatible types: 'PSTRSAFE_LPWSTR' and 'PSTRSAFE_LPTSTR'
以下是代碼從JwaStrSafe.pas相關部分(從絕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}
我在參數ppszDestEnd上得到StringCchCopyExW調用的錯誤。
看看類型定義我知道PSTRSAFE_LPTSTR是STRSAFE_LPTSTR的指針類型,它只是STRSAFE_LPWSTR的別名,爲什麼PSTRSAFE_LPTSTR和PSTRSAFE_LPWSTR不兼容?
解決方案
感謝David的解釋我更換
PSTRSAFE_LPTSTR = ^STRSAFE_LPTSTR;
與
PSTRSAFE_LPTSTR = PSTRSAFE_LPWSTR;
現在的代碼編譯沒有錯誤。
感謝
您使用的是什麼版本的Delphi? –
我是usind Delphi XE2 –