タグ付けされた質問 「delphi」

Delphiは、Object Pascalを使用してネイティブのWindows、macOS、Linux、iOS、およびAndroidアプリケーションを迅速に開発するための言語です。名前は、Delphi言語のほか、Delphiプロジェクトの編集とデバッグに役立つライブラリ、コンパイラ、およびIDEを指します。

2
暗黙的なインターフェース変数のコンパイラー処理は文書化されていますか?
少し前に、暗黙のインターフェイス変数について同様の質問をしました。 この質問の原因は、コンパイラによって作成された暗黙のインターフェイス変数の存在を認識していなかったため、コードのバグでした。この変数は、それを所有するプロシージャが終了したときに確定されました。これにより、変数の存続期間が予想よりも長くなるため、バグが発生しました。 これで、コンパイラの興味深い動作を説明する簡単なプロジェクトができました。 program ImplicitInterfaceLocals; {$APPTYPE CONSOLE} uses Classes; function Create: IInterface; begin Result := TInterfacedObject.Create; end; procedure StoreToLocal; var I: IInterface; begin I := Create; end; procedure StoreViaPointerToLocal; var I: IInterface; P: ^IInterface; begin P := @I; P^ := Create; end; begin StoreToLocal; StoreViaPointerToLocal; end. StoreToLocalあなたが想像するようにコンパイルされます。I関数の結果であるローカル変数は、暗黙のvarパラメーターとしてに渡されますCreate。片付けを行うStoreToLocalと、への呼び出しが1回になりますIntfClear。そこに驚きはありません。 ただし、StoreViaPointerToLocal扱いは異なります。コンパイラは、に渡す暗黙のローカル変数を作成しCreateます。にCreate戻ると、への割り当てP^が実行されます。これにより、インターフェイスへの参照を保持する2つのローカル変数がルーチンに残ります。片付けを行うStoreViaPointerToLocalと、への呼び出しが2回行われIntfClearます。 のコンパイル済みコードStoreViaPointerToLocalは次のようになります。 ImplicitInterfaceLocals.dpr.24: …

19
区切り文字に基づいて文字列を文字列の配列に分割します
入力文字列を区切り文字に基づいて文字列の配列に分割するDelphi関数を見つけようとしています。私はグーグルでたくさん見つけました、しかしすべてが彼ら自身の問題を持っているようで、私はそれらのどれも動かすことができませんでした。 :のような文字列"word:doc,txt,docx"を「:」に基づいて配列に分割する必要があり ます。結果はになります ['word', 'doc,txt,docx']。 誰かが彼らが働くことを知っている機能を持っていますか? ありがとうございました

1
このDelphi動的配列の動作は期待されていますか
問題は、動的配列がクラスメンバーとして設定されている場合、Delphiによって内部的にどのように管理されるかです。それらは参照によってコピーまたは渡されますか?Delphi 10.3.3を使用。 このUpdateArrayメソッドは、配列から最初の要素を削除します。ただし、配列の長さは2のままです。このUpdateArrayWithParamメソッドは、配列から最初の要素も削除します。ただし、配列の長さは正しく1に短縮されます。 ここにコードサンプルがあります: interface type TSomeRec = record Name: string; end; TSomeRecArray = array of TSomeRec; TSomeRecUpdate = class Arr: TSomeRecArray; procedure UpdateArray; procedure UpdateArrayWithParam(var ParamArray: TSomeRecArray); end; implementation procedure TSomeRecUpdate.UpdateArray; begin Delete(Arr, 0, 1); end; procedure TSomeRecUpdate.UpdateArrayWithParam(var ParamArray: TSomeRecArray); begin Delete(ParamArray, 0, 1); end; procedure Test; var r: …

1
CreateVirtualDiskはエラー87を出します(パラメーターが正しくありません)。
Windows 10では、CreateVirtualDisk APIを使用して仮想ディスクを作成しようとすると失敗し、エラーコード87を返します。 最小限の再現可能な例を完成させます。 program Project3; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Winapi.Windows; type // Identifiers for virtual storage types and providers VIRTUAL_STORAGE_TYPE = record DeviceId: ULONG; // VIRTUAL_STORAGE_TYPE_DEVICE_xxx VendorId: TGUID; // VIRTUAL_STORAGE_TYPE_VENDOR_xxx end; PVIRTUAL_STORAGE_TYPE = ^VIRTUAL_STORAGE_TYPE; const VIRTUAL_STORAGE_TYPE_VENDOR_MICROSOFT: TGUID = '{EC984AEC-A0F9-47e9-901F-71415A66345B}'; VIRTUAL_STORAGE_TYPE_VENDOR_UNKNOWN: TGUID = '{00000000-0000-0000-0000-000000000000}'; type // Version definitions …

1
@Hと@H [0]の違い
私が持っています var H: array of THandle; 次に、ループで複数のスレッドを作成し、Hの要素にスレッドハンドルを割り当てて、それらを待機します。@H [0]を2番目のパラメーターとして以下のWFMOに渡すと機能します。 WaitForMultipleObjects(Length(H), @H[0], True, INFINITE) <-- Works しかし、以下のように@Hを渡すと、WAIT_FAILEDで失敗します。GetLastErrorは「無効なハンドル」を返します。 WaitForMultipleObjects(Length(H), @H, True, INFINITE) <--- Fails. @Hが@H [0]と異なるのはなぜですか?

2
TStrings.SaveToFileが最後の空の行を作成しないようにするにはどうすればよいですか?
次の.\input.txtようなファイルがあります。 aaa bbb ccc を使用TStrings.LoadFromFileしてそれを読み取り、それを(変更を適用せずに)を使用して書き戻すTStrings.SaveToFileと、出力ファイルの最後に空の行が作成されます。 var Lines : TStrings; begin Lines := TStringList.Create; try Lines.LoadFromFile('.\input.txt'); //... Lines.SaveToFile('.\output.txt'); finally Lines.Free; end; end; 同じ動作がTStrings.Text、最後に空行を含む文字列を返すプロパティを使用して観察できます。

1
Delphiコンパイラを特定の警告コードで停止する方法は?
エラーのように、コンパイラーが特定の警告で停止することを望みます。 目標は、コードに本当に有害である可能性がある警告を強制的に考慮することです(すべての警告が重大度に関して等しいわけではありません) 例として、私はコンパイラがそのような警告で停止することを望みます: 結果が初期化されていない可能性があります 非推奨メソッドの使用 ... IDE、おそらくコマンドラインコンパイラにオプションが見つかりませんでしたか? Delphi 10.3.2 おかげで、
8 delphi 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.