問題タブ [pchar]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1078 参照

delphi - Delphi (Unicode を使用) で SetString のメモリ使用量が少ないのはなぜですか?

これは Delphi 2009 であるため、Unicode が適用されます。

次のように、バッファから StringList に文字列をロードするコードがいくつかありました。

しかし、いくつかの変更中に、ロジックを変更して、最終的に同じレコードを追加することになりましたが、SetString を介してではなく、個別に派生した文字列として、つまり

私が気付いたのは、StringList のメモリ使用量が 52 MB から約 70 MB に増加したことです。それは30%以上の増加でした。

メモリ使用量を元に戻すには、次のように SetString を使用して文字列変数を作成し、StringList に追加する必要があることがわかりました。

S と SRecord を調べて比較すると、すべてのケースでまったく同じです。ただし、SRecord を MyStringList に追加すると、S を追加するよりも多くのメモリが使用されます。

何が起こっているのか、なぜ SetString がメモリを節約するのか知っている人はいますか?


ファローアップ。まさかとは思いましたが、念のため確認してみました。

ない:

または

余分なスペースを解放します。そのためには SetString が必要なようです。

0 投票する
3 に答える
8030 参照

delphi - DLLのDelphiでは、関数の戻り値pcharを割り当てる必要がありますか?

pcharを返す関数を含むDLLがあります。(borlndmmを使用する必要がないように)私が最初に行っていたのは、文字列をpcharとしてキャストし、それを返すことでした。

しかし、90%の確率で期待どおりの結果が得られ、それ以外の場合は何も返されませんでした。

次に、pcharにメモリを割り当てる必要があること、そしてそれを元の方法で行うことは、関数が最初に呼び出されたときに常に存在するわけではないメモリをpcharポイントにすることであると考えるようになりました。だから私は今これを持っています

しかし、これは私が行うプログラムの終わりに割り当てられたメモリをクリーンアップする必要があります

したがって、64ドルの質問は次のとおりです。DLL内の関数からPCharを返すときにメモリを割り当てる必要がありますか、それともPCharにキャストするだけですか。

0 投票する
1 に答える
2976 参照

c# - Pchar Delphi DLL を C# にインポートしますか?

私はデルファイで手順を持っています:

この手順では、渡した「 password 」 pcharにパスワードを出力する必要があります。

私は思いつきます:

次に、私が電話すると:

したがって、「pass」文字列に出力するパスワード。

しかし、BadImageFormatException was unhandled: 正しくない形式のプログラムを読み込もうとしました。(HRESULT からの例外: 0x8007000B)

私が使用した関数形式が間違っているように聞こえますか? PChar に間違った UnmanagedType を使用したのだろうかと思いますが、読みからすると、LPWStr と LPStr のどちらかです。

前もって感謝します...

0 投票する
2 に答える
514 参照

string - この最適化を改善するために PChars を正しく使用するにはどうすればよいですか?

アプリで頻繁に呼び出される関数があります。これは基本的にcsvパーサーであり、最初の値を「ポップ」し、入力文字列を残りの文字列に変更します。

PChars を使用して、このルーチンを最適化してみたいと思います。だから私はこの方法を思いつきましたが、残念ながら結果の出力に奇妙な文字が表示されます。間違ったポインタが原因だと推測しています。

誰でも「ポイント」:)私を正しい方向に向けますか?

0 投票する
2 に答える
1028 参照

c++ - unsigned char *buf=NULL を Pascal に変換しますか?

私は Borland Delphi で作業しており、Borland C++ Builder には数行のコードがあります。これらの行を Delphi ソースに翻訳したいと思います。

... ... ...

この buf に PCHar 値を割り当てたいと思います。

0 投票する
1 に答える
483 参照

delphi - ルーチンに渡されたPChar(文字列からの型キャスト)が戻った後もメモリに残っている必要があるのはなぜですか?

バッファをコピーするオーバーヘッドを排除するために、文字列をPCharにキャストできます(ルーチンがメモリにPCharを残す必要がないことが確実な場合)。 http://docwiki.embarcadero.com/RADStudio/en/Passing_a_Local_Variable_as_a_PChar

文字列があり、参照カウントが0に減少するまでメモリに残るため、スコープの途中で削除されることはありません。では、なぜ私たちPCharは記憶にとどまる必要があるのでしょうか?PChar以前に別のAPI関数に渡されたものとまったく同じ参照を必要とするAPI関数はありますか?

特にサンプルコードを検討しています。したがって、質問は「ルーチンに渡されたPChar(文字列からの型キャスト)が戻った後もメモリに残る必要があるのはなぜですか?」である必要があります。非同期i/oルーチン、呼び出し元が戻った後に渡されたpcharにアクセスする非同期メソッド、または別のスレッドによるグローバル文字列の変更は、正当な理由です。

0 投票する
3 に答える
555 参照

delphi - Delphi で PChar を 16 進数の 00 を超えてファイルの最後に到達させるにはどうすればよいですか?

私は非常に大きなファイル (Unicode - Delphi 2009) を解析していますが、Stackoverflow の質問で概説されているように、PChar 変数を使用して解析するための非常に効率的なルーチンがあります: Delphi で行を解析する最速の方法は何ですか?

いくつかの hex:00 文字が埋め込まれたファイルに遭遇するまで、すべてがうまく機能していました。この文字は PChar 文字列の終わりを示し、解析はその時点で停止します。

ただし、ファイルをロードすると、次のようになります。

次に、ファイルのサイズがはるかに大きいことがわかります。メモ帳でファイルを開くと、PChar のように最初の hex:00 で停止するのではなく、ファイルの最後まで読み込まれます。

PChar 解析を使用しながら、読み取り/解析を遅くすることなくファイルの最後まで読み取るにはどうすればよいですか?

0 投票する
3 に答える
253 参照

c++ - ベクトルを渡す* getnameinfo 関数へ

vector* 型の変数を winsock2 の getnameinfo 関数に渡すにはどうすればよいですか?

どうすれば vector* を PCHAR に変換できるのでしょうか?

0 投票する
3 に答える
220 参照

string - ユーザーに質問し、メッセージ受信者で応答を送り返します

ユーザーにパスワードの入力を求めたい。VCLが実行されているメインスレッドとは別のスレッドでパスワードが必要になることがあるため、メインウィンドウにメッセージを送信してパスワードを要求しようとしました。次に、メインウィンドウがユーザーに尋ねます。

ユーザーに質問する方法:

メインウィンドウに尋ねる方法:

しかしPasswordPasswordBufferその後は空になります。私は何が間違っているのですか?

0 投票する
2 に答える
5285 参照

delphi - XEでpcharの配列をパラメータとして外部dllを呼び出す

Delphi 6 で正常に動作する Delphi プロジェクトがありますが、XE にアップグレードすると動作しません。Delphi XE の新しい Unicode タイプと関係があることはわかっています。パラメータの定義を pchar から pansichar、ansichar に変更しようとしましたが、これまでのところ成功していません。誰かが私が間違ったことを見ることができますか? 私のプロジェクトは、次のように定義されたサードパーティの dll で関数を呼び出します。

そして、これが私が関数を呼び出す方法です。

誰かが私を助けてくれれば、とても感謝しています。

マリオ。