1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

dxlib-for-linux 2023年(+α)の進捗

Posted at

(例によって)旧暦になってしまいましたが、今年の進捗

去年に引き続き少しですが追加実装しました。
年明けにアプデがでてたのでそこの対応まで含めます。

sample12_clipboard

クリップボードの読み書きができるようになりました。
なお読み出し機能に構造上の問題があったのを見つけたので本家に報告しました。
無事修正されたようで良かったです。
本家DxLibでクリップボード読み出し機能を使っている場合は3.24d以降を使いましょう。

Makefile

make時の使い勝手が多少改善されています。
完全ではないですが、makeによる依存性解決がなされるので変更された箇所だけ再ビルドします。
(dxlib-for-linux自体の開発をしない場合はあまり影響ないかも)

細かい話

GetClipboardTextについて

dxlib-for-linuxにおいては技術的制約によって第一引数にNULLを渡すとクリップボードがキャッシュされ、
第一引数に非NULLを渡すとキャッシュが消失します。

int len = GetClipboardText(NULL, 0);  // A
char* str = (char*)malloc(len);
GetClipboardText(str, len);  // B

すなわちAを呼ばずにBを呼んだり、Bを2度続けて呼ぶことはできません。
本家でもそのような使い方は危険なのでしないと思います。

なお内部的に値をキャッシュしているので、
AとBの間でクリップボードの内容が書き換えられたとしても、
BではAの時点でのクリップボードの内容が出てきます。
同様の理由でAを呼んでBを呼ばないでいると、
その間メモリを確保したままとなります。

また極端ですがGetClipboardTextの戻り値および第二引数DestBufferBytesがそれぞれint型なので、
2GBないし4GB(試してない)を超えるデータは本家同様扱えませんのでご注意ください。

Windowsの場合、クリップボードは共有メモリからいつでも呼び出すことができます(もちろんロック中は不可)が、
Linux(というかX11)の場合、クリップボードの中身を要求して、メッセージに乗せて返すといった挙動をするため、
このような実装となっています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?