Tôi nhận được lỗi này:E2010 Các loại không tương thích, tại sao?
[DCC Error] JwaStrSafe.pas(2277): E2010 Incompatible types: 'PSTRSAFE_LPWSTR' and 'PSTRSAFE_LPTSTR'
Sau đây là phần có liên quan của mã từ JwaStrSafe.pas (từ Jedi Api), tôi đang biên soạn với UNICODE biểu tượng định nghĩa:
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}
Tôi nhận được lỗi trên cuộc gọi của StringCchCopyExW, trên tham số ppszDestEnd.
Nhìn vào định nghĩa loại tôi hiểu rằng PSTRSAFE_LPTSTR là loại con trỏ tới STRSAFE_LPTSTR, đây chỉ là bí danh của STRSAFE_LPWSTR, tại sao PSTRSAFE_LPTSTR và PSTRSAFE_LPWSTR không tương thích?
Giải pháp
Nhờ giải thích của David Tôi thay
PSTRSAFE_LPTSTR = ^STRSAFE_LPTSTR;
với
PSTRSAFE_LPTSTR = PSTRSAFE_LPWSTR;
bây giờ mã biên dịch mà không có lỗi.
Cảm ơn
Bạn đang sử dụng phiên bản Delphi nào? –
Tôi đang sử dụng Delphi XE2 –