トップページ > 記事閲覧
GetClipboardTextの余分な1バイト確保
名前:dra 日時: 2024/02/01 00:08

お疲れ様です。 Windows/DxSystemWin.cppのGetClipboardText_PFおよびGetClipboardText_WCHAR_T_PFにて、 ``` Size = WinAPIData.Win32Func.GlobalSizeFunc( Mem ) + 1 ; ``` としていますが、 learn.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats を見たところ、そもそもCF_TEXTもCF_CLIPBOARDもnullを終了の合図として扱っていて、 GlobalSizeもnullを含んだサイズを返しています。(実測でも確認) 確保したまま初期化されない領域が残ってしまっているので追加の1バイトはないほうが良いと思われます。 PoCが必要であればこちらを使用してみてください。 github.com/dragoon2014/dxlib-for-linux/blob/main/samples/sample12_clipboard.cpp 起動後、適当な文字列をコピーした状態で567890を順番に押すと取り込みからダンプまで行います。 (余談ですが、Windows 11をお使いであればメモ帳以外で試してみてください(Edgeとか) おそらくメモ帳側のバグでマルチバイトビルド時にサイズ計算がおかしいのか常に文字数の4倍のサイズを確保しようとしてます)
メンテ

Page: 1 |

Re: GetClipboardTextの余分な1バイト確保 ( No.1 )
名前:管理人 日時:2024/02/02 03:36

テスト用のプログラムまで用意していただきありがとうございます 手元でも null文字が含まれたサイズが返って来ていることを確認しました + 1 という3文字を消しただけですが、変更を反映した暫定最新版をこちらにアップしました m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: GetClipboardTextの余分な1バイト確保 ( No.2 )
名前:dra 日時:2024/02/02 23:53

早速対応ありがとうございます。 コード見てみましたが、WCHAR側が+1のままになっていないでしょうか? (WCHARだと2バイト1文字ですが奇数になってるのも気になります)
メンテ
Re: GetClipboardTextの余分な1バイト確保 ( No.3 )
名前:管理人 日時:2024/02/04 16:27

ご指摘ありがとうございます 殆どの文字列処理系の関数の内部処理は char と WCHAR でソースを共有しているので、 GetClipboardText の WCHAR 用の内部関数が char 用とは別関数になっていることを失念していました… 今回も + 1 の3文字を消しただけですが、よろしければダウンロードしてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.zip // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.zip // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.zip // Windows版 C++ Builder 11.3 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.zip // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.zip // ソース (中身を既存のライブラリのファイルに上書きして『リビルド』をして下さい)
メンテ
Re: GetClipboardTextの余分な1バイト確保 ( No.4 )
名前:dra(解決) 日時:2024/02/05 00:51

こちらでも動作確認できました。 対応ありがとうございました。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存