1

非ユニコード Delphi アプリケーションから GetStringTypeW を呼び出そうとしていますが、何をしても ERROR_INVALID_FLAGS が返されます。使用中のその関数のコード サンプルも見つかりませんでした。

windows.pas で提供されているものは、3 番目のパラメーターをブール値 (INT) として誤って識別しているため、関数ヘッダーも再定義する必要がありました。

関数の私の定義は次のとおりです。

function GetStringTypeW(dwInfoType: DWORD; lpSrcStr: PWideChar; cchSrc: Integer; lpCharType: Pointer): BOOL;

(何らかの理由で、その関数は stdcall として定義されていません。stdcall として定義しようとすると、アクセス違反が発生します。)

そして私の電話:

var
  aCharType: Array of WORD;
  APassword: WideString
begin
{..}
    SetLength(aCharType, Length(APassword));
    if not GetStringTypeW(CT_CTYPE1, PWideChar(APassword[1]), Length(APassword), @aCharType[0]) then
      RaiseLastOSError;
{..}

私が得るエラーは

System Error.  Code: 1004.
Invalid flags.

CT_CTYPE1 が 1 であることを確認しました。

何が間違っているのか、またはこの関数を使用するためのコードサンプルを知っている人はいますか?

4

2 に答える 2

1

2 番目のパラメーターが間違っています。その のメモリアドレスを取得する代わりに、単一のWideChar値を に型キャストしています。つまり、次のように変更します。PWideCharWideChar

PWideChar(APassword[1])

これに:

PWideChar(APassword)

またはこれ ( の長さがAPassword0 でない場合のみ):

@APassword[1]
于 2013-09-17T18:14:17.743 に答える