問題タブ [widestring]
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.
delphi - Delphi:高速(er)ワイドストリング連結
私はADORecordset
をhtmlに変換することを仕事としている関数を持っています:
そして、関数の内臓には、多くの広い文字列の連結が含まれます。
数千の結果が得られたため、ユーザーが感じると思われる関数の実行には時間がかかりすぎます。Delphi Sampling Profilerは、時間の99.3%@WStrCatN
がワイドストリング連結(および)に費やされていることを示してい@WstrCat
ます。
誰もがワイドストリング連結を改善する方法を考えることができますか?Delphi5には文字列ビルダーはないと思います。また、Format
Unicodeをサポートしていません。
そして、だれもだまそうとしないことを確実にするために:あなたがインターフェースを実装しているふりをします:
アップデートワン
IXMLDOMDocument
HTMLをxmlとして構築するために、を使用することを考えました。しかし、それから私は、最終的なHTMLがそうxhtml
ではなくhtml
、微妙ではあるが重要な違いであることに気づきました。
アップデート2
Microsoftナレッジベースの記事:文字列連結のパフォーマンスを向上させる方法
c++ - Visual Studio 2005 での TCHAR を使用した C++ テンプレート関数の特殊化
テンプレート化された operator<< 関数を使用するロギング クラスを作成しています。ログ メッセージを書き込む前にワイドからナローへの変換を行えるように、テンプレート関数をワイド文字列に特化しています。TCHAR を正しく動作させることができません。特殊化を使用していません。アイデア?
関連するコードは次のとおりです。
そしてソースファイル
ここで、次のテスト プログラムを使用してこれらの機能を実行します。
上記のテストを実行すると、次のことがわかります。
残念ながら、それは正しくありません。変換できるように、最後のものを「TCHAR」にしたいと思います。Visual Studio のデバッガーによると、テスト 5 で呼び出されている関数にステップ インすると、型は wchar_t*& ですが、適切な特殊化を呼び出していません。アイデア?
関係があるかどうかはわかりませんが、これは Windows CE 5.0 デバイス上にあります。
c++ - C++:ワイド文字が正しく出力されませんか?
私のコードは基本的にこれです:
ワイド文字列を使いたいのですが、出力方法がわからないのでwprintfを使いました。次のようなものを実行すると:
16 進数のコードポイントはこれを作成します。
なぜそれらはすべて順番にジャンプするのですか?つまり、wprintf が間違っている場合、なぜこのような特定のごちゃまぜな順序で出力されるのか、まだわかりません!
編集:エンディアンか何か?2文字ごとに回転しているようです。は。
編集 2: wcout を使用してみましたが、まったく同じ 16 進数のコードポイントが出力されます。変!
c++ - コードポイントを表示するために wchar_t を int にキャストする方法は?
ユニコードをいじって何かをしたいときに、プログラムに単純な関数があります。この関数では、ユーザーが入力した文字のコード値を表示したいと考えていました。それは可能だと思われました、ここに私の機能があります:
(int) "a"
ご覧のとおり、整数値( などのASCII文字など)を表示したかっただけですlistcode(L"&")
が、&: &
!
そのようなワイド文字の整数値を見つけることはできませんか?
delphi - SysFreeStringがInt3ブレークポイントにヒットする原因は何ですか?
Delphi 2007では正常に機能するが、D2010では機能しないコードがいくつかあります。これには、文字列を渡し、それをPWideChar(具体的には、UnicodeStringポインターではなく、WideStringポインター)に変換し、何らかの処理を行ってから、その文字列に対してSysFreeStringを呼び出すことが含まれます。空白の文字列が渡されるまでは正常に機能し、その後SysFreeStringが壊れます。それは、Int 3
NTDLL.DLL内にブレークポイントを発生させることになる一連のことを呼び出します。この時点を過ぎて続行すると、
プロジェクトで例外クラス$C0000005が発生し、メッセージ「0x7747206eでのアクセス違反:アドレス0x539b8dbaの読み取り」が発生しました。
よく見ると、これは標準のアクセス違反メッセージではありません。
スタックトレースがヒットしたときのトップは、Int 3
次のようになります。
ここで何が起こっているのか誰かが知っていますか?
編集(コメントから):
ただし、これはWideStringではありません。これはStringToOleStrによって生成されたPWideCharであり、空白以外の文字列が渡されてもダブルフリーエラーは発生しません。残念ながら、これは著作権で保護されているサードパーティコンポーネントであるため、コードサンプルを投稿することはできません。(サポートが終了したため、サポートを依頼することはできません。基本的に、全体が1つの大きな混乱です。)
c++ - wstring :: c_strが適切に削除されない場合、メモリリークが発生しないのはなぜですか
コードセグメント1:
コードセグメント2
コードセグメント2の値が削除されない場合、メモリリークは発生しません。ただし、コードセグメント1のvalue1が削除されていない場合は、メモリリークが発生します。wstring::c_strの内部コードは私には同じように見えます。
c++ - send(sock、wszBuffer、...)を使用してTCHARバッファーを送信しますか?
C++のWin32ソケットを介して送信する必要があるワイド文字のXMLメッセージがあります。
送信する前に、ワイド文字を配列にsprintf(szSendBuffer, "%S", wszBuffer)
バッファリングする必要がありますか?char
これを送信する正しい方法は何ですか?
delphi - COMサーバーからWideStringを返すには?
_TLB.pas ファイルのこのインターフェイス
これはOS Windowsに見えます
COMサーバーの関数は次のようになります
COMクライアントでは、この関数を次のように呼び出しています
$75A9FBAE でエラー First chance exception を取得します。メッセージ「モジュール 'RPCRT4.dll' のアドレス 75A409A4 でのアクセス違反」を伴う例外クラス EAccessViolation。アドレス FFFFFFF8' の読み取り。プロセス Project1.exe (2296)
整数を返したい場合は、うまくいきます。ワイドストリングを返す方法は?
delphi - WideStringで動作するReadLn(utf-8ファイル)
私はdelphi7を使用しています。
utf-8ファイルを1行ずつ読み取る必要があります。各行には単語とその重み(数値)が含まれているため、次のすべての行を読み取り、行を区切り文字(tab char)で分割して、これをメモリに保存する必要があります。 。
それで、
1)Delphiでutf-8ファイルを操作するためのライブラリはありますか(サードパーティの可能性があります)
2)関数はワイドストリングで正常に動作しますか?PosExを使用しています。それで、そうでない場合は、ワイドストリングを操作するためのサードパーティライブラリへのリンクも提供できますか?
delphi - 固定長の Delphi 文字列でワイド文字を使用するにはどうすればよいですか?
Delphi 2010 では (おそらく D2009 でも)、デフォルトの文字列型は UnicodeString です。
ただし、宣言すると...
...最初の文字列sはUnicodeStringとして宣言されていますが、2 番目の文字列ssはAnsiStringとして宣言されています!
これを確認できます:SizeOf(s[1]);
サイズ 2 と を返しSizeOf(ss[1])
ます。サイズ 1 を返します。
宣言したら…
... ssも UnicodeString 型であることを望みます。
- 両方の文字列が UnicodeString 型であることを Delphi 2010 に伝えるにはどうすればよいですか?
- ssが 4 つの WideChar を保持していることを他にどのように宣言できますか?
WideString[4]
コンパイラは型宣言orを受け入れませんUnicodeString[4]
。 - 同じ型名stringに対する 2つの異なるコンパイラ宣言の目的は何ですか?